将字符串数组从Delphi 2传递到COM Visible C#.net DLL
我试图从Delphi2.0客户端应用程序调用COM DLL(用C#编写)中的方法。 我试图调用的方法的参数之一是字符串数组。 查看通过将库导入到更高版本的Delphi中创建的单元,我看到字符串数组参数被定义为一个数组 此代码在Delphi 2007中工作:将字符串数组从Delphi 2传递到COM Visible C#.net DLL,c#,delphi,com,safearray,C#,Delphi,Com,Safearray,我试图从Delphi2.0客户端应用程序调用COM DLL(用C#编写)中的方法。 我试图调用的方法的参数之一是字符串数组。 查看通过将库导入到更高版本的Delphi中创建的单元,我看到字符串数组参数被定义为一个数组 此代码在Delphi 2007中工作: stringToEcho := VarArrayCreate([0, 0], varVariant); stringToEcho[0] := 'Hello World!'; oResponse := iface.RequestR
stringToEcho := VarArrayCreate([0, 0], varVariant);
stringToEcho[0] := 'Hello World!';
oResponse := iface.RequestResponse('EXTests', 'Echo', PSafeArray(VarArrayAsPSafeArray(stringToEcho)), 30, '', true);
调用RequestResponse方法时,此Delphi 2代码在运行时导致“参数不正确”错误:
stringToEcho := VarArrayCreate([0, 0], varVariant);
stringToEcho[0] := 'Hello World!';
oResponse := iface.RequestResponse('EXTests', 'Echo', stringToEcho, 30, '', true);
显然,变量数组不是safearray,我需要一些方法来转换或从变量数组中提取safearray,就像我在Delphi2007示例中所做的那样
我已经看过OLE2装置和系统装置。我可以在System.pas中看到一些变量数组支持例程,但没有变量数组转换例程
在Delphi2中,如何将PSA数据传递给COM自动化服务器
请注意,另一个不同点是,我在Delphi2007中使用早期绑定,在Delphi2中使用晚期绑定。谢谢大家。我知道Delphi变体数组不是SafeArray。但他们很接近:) Delphi的VarArrayCreate实际上调用Win32 SafeArrayCreate 我想我需要一些从VariantArray中提取SafeArray的方法,就像我在Delphi2007示例中所做的那样。 我确实试着把瓦拉亚斯帕雷后送到德尔福2,但没有成功。 然而,我能够从Delphi2007 VarArrayRef中向后移植另一个助手函数,它实际上在Delphi2的后期绑定上下文中更有用。 现在一切都好了。
顺便说一句,我确实尝试创建varOLEStr的VarArray,但在调用RequestResponse方法时出现了“类型不匹配”错误。a
SafeArray
与avariant array
不同。有一些链接可能会有所帮助。你也可以在这个网站上搜索一些相关的帖子。我不知道delphi,但是COM有API来创建和填充safearray(这是它自己的一种类型,似乎是RequestResponse期望的类型):SafeArrayCreate,SafeArrayPutElement,SafeArrayDestroy,等等。也许这有帮助:你试过varOleStr而不是varVariant吗?