Передать массив в вызов метода COM в PowerBuilder - PullRequest
0 голосов
/ 31 октября 2018

Я хочу вызвать метод COM-объекта, который принимает аргумент, являющийся массивом из PowerBuilder. Метод отлично работает с другими контроллерами автоматизации OLE (VB6, VBScript, VBA, Delphi, PHP, если назвать только некоторые из них), а в IDL это выглядит так:

    void MyMethod([in, out] SAFEARRAY(VARIANT)* argumentsArray);

Пока мне не удалось вызвать этот метод из PowerBuilder. Я всегда получаю ошибку во время выполнения, похожую на «Недопустимый тип параметра, вызывающий функцию внешнего объекта MyMethod в строке XX в XXXXXX». Насколько я могу судить, эта ошибка генерируется PowerBuilder до того, как мой метод вызывается, то есть это не вид преобразованного HRESULT из самого метода, и метод вообще не вызывается.

У меня нет проблем с вызовом других методов того же COM-объекта из PowerBuilder - тех, которые не используют массивы в качестве аргументов.

Примеры кода PowerBuilder, который я пробовал и который не работает:

Any Arguments[]
Arguments[1] = MyArgument
MyObject.MyMethod(Arguments)

Или

OLEObject Arguments[]
Arguments[1] = MyArgument
MyObject.MyMethod(Arguments)

Или

OLEObject Arguments[0 to 0]
Arguments[0] = MyArgument
MyObject.MyMethod(Arguments)

Или

OLEObject Arguments[0 to 0]
Arguments[0] = MyArgument
MyObject.MyMethod(REF Arguments)

Я искал StackOverflow и в Интернете и нашел только ответы на противоположную проблему - как передать массивы, являющиеся результатами методов COM, обратно в PowerBuilder.

Как передать массив тогда?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...