Я хочу вызвать метод 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.
Как передать массив тогда?