将字符串数组从Delphi 2传递到COM Visible C#.net DLL

问题描述 投票:0回答:1

我正在尝试从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中,我正在使用后期绑定。

非常感谢!

c# delphi com safearray
1个回答
0
投票

谢谢。我了解Delphi变体数组不是SafeArray。但是他们很接近:)Delphi的VarArrayCreate实际上调用Win32 SafeArrayCreate。

我想我需要某种方法,就像在Delphi 2007示例中所做的那样,从VariantArray中提取SafeArray。我确实尝试将VarArrayAsPSafeArray反向移植到Delphi 2,但是没有成功。但是,我能够从Delphi 2007 VarArrayRef向后移植另一个辅助函数,该函数实际上在Delphi 2的后期绑定上下文中更有用。所以现在一切都好。顺便说一句-我确实尝试创建一个varOLEStr的VarArray,但是在调用RequestResponse方法时出现了“类型不匹配”错误。

© www.soinside.com 2019 - 2024. All rights reserved.