Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串数组从Delphi 2传递到COM Visible C#.net DLL_C#_Delphi_Com_Safearray - Fatal编程技术网

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

将字符串数组从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

我试图从Delphi2.0客户端应用程序调用COM DLL(用C#编写)中的方法。 我试图调用的方法的参数之一是字符串数组。 查看通过将库导入到更高版本的Delphi中创建的单元,我看到字符串数组参数被定义为一个数组

此代码在Delphi 2007中工作:

  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
与a
variant array
不同。有一些链接可能会有所帮助。你也可以在这个网站上搜索一些相关的帖子。我不知道delphi,但是COM有API来创建和填充safearray(这是它自己的一种类型,似乎是RequestResponse期望的类型):SafeArrayCreate,SafeArrayPutElement,SafeArrayDestroy,等等。也许这有帮助:你试过varOleStr而不是varVariant吗?