У меня есть процедура, которую мне нужно вызвать с помощью COM, которая на C # объявлена так:
void DoSomething (string param1, string[] param2, Object[] param3)
Объявление Delphi в импортированной библиотеке типов:
procedure DoSomething (param1: System.Widestring,
param2: ActiveX.PSafeArray,
param3: ActiveX.PSafeArray);
param1 - это просто строка.
param2 - это массив имен аргументов, скажем: ['arg1', 'arg2'].
param3 - это соответствующие значения для этих аргументов.
Пример: arg1: Double = 1.23, arg2: integer = 10.
Это приведет к:
- param2: ['arg1', 'arg2']
- param3: [1.23, 10]
Пока у меня есть этот код для преобразования param2 [] в PSafeArray:
var param2: array of string;
i: integer;
va_param2: Variant;
psa_param2: Activex.PSafeArray;
begin
SetLength (param2, 2);
param2 [0] := 'arg1';
param2 [1] := 'arg2';
// Create VariantArray, copy data
va_param2 := VarArrayCreate ([0, Length(param2)-1], varOleStr);
for i := 0 to Length(param2)-1 do
va_param2 [i] := param2 [i];
// Convert VariantArray to PSafeArray
psa_param2 := PSafeArray (TVarData (va_param2).VArray);
end;
Теперь у меня должен быть PSafeArray для param2.
Но как я могу это сделать для param3 []?
Будут разные типы данных, а не только строки.
Поскольку я не могу вызвать процедуру COM до того, как будут настроены параметры param2 и param3, я также не могу быть уверен, что приведенный выше код делает то, что мне нужно.
Он выполняется, но правильно ли я делаю эти преобразования для передачи результата в над процедурой COM?