我正在尝试从Delphi 2.0客户端应用程序调用COM DLL(用C#编写)中的方法。我尝试调用的方法的参数之一是字符串数组。查看通过将库导入到更高版本的Delphi中创建的单元,我看到字符串数组参数定义为PSafeArray。
此代码在Delphi 2007中有效:
stringToEcho := VarArrayCreate([0, 0], varVariant);
stringToEcho[0] := 'Hello World!';
oResponse := iface.RequestResponse('EXTests', 'Echo', PSafeArray(VarArrayAsPSafeArray(stringToEcho)), 30, '', true);
此Delphi 2代码在调用RequestResponse方法时在运行时导致“参数不正确”错误:
stringToEcho := VarArrayCreate([0, 0], varVariant);
stringToEcho[0] := 'Hello World!';
oResponse := iface.RequestResponse('EXTests', 'Echo', stringToEcho, 30, '', true);
显然,变量数组不是安全数组,我需要某种方式,如在Delphi 2007示例中所做的那样,从变量数组转换或提取SafeArray。
我看过OLE2单元和系统单元。我可以在System.pas中看到一些Variant数组支持例程,但没有变体数组 SafeArray转换例程。
如何将PSafeArray传递给Delphi 2中的COM自动化服务器?
注意,另一点区别是我在Delphi 2007中使用的是早期绑定。在Delphi 2中,我正在使用后期绑定。
非常感谢!
谢谢。我了解Delphi变体数组不是SafeArray。但是他们很接近:)Delphi的VarArrayCreate实际上调用Win32 SafeArrayCreate。
我想我需要某种方法,就像在Delphi 2007示例中所做的那样,从VariantArray中提取SafeArray。我确实尝试将VarArrayAsPSafeArray反向移植到Delphi 2,但是没有成功。但是,我能够从Delphi 2007 VarArrayRef向后移植另一个辅助函数,该函数实际上在Delphi 2的后期绑定上下文中更有用。所以现在一切都好。顺便说一句-我确实尝试创建一个varOLEStr的VarArray,但是在调用RequestResponse方法时出现了“类型不匹配”错误。