Csharp/C#教程:从C#Code调用delphi DLL方法分享


从C#Code调用delphi DLL方法

我试图从C#ASP.NET代码调用Delphi函数。 函数的声明如下所示:

function SomeFunction(const someString, SomeOtherString: string): OleVariant; 

从我的C#代码我有这个代码:

 [DLLImport(MyDLL.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern object SomeFunction(string someString, string SomeOtherString); 

每次我调用此方法并将其存储为对象时,我都会收到P / Invoke错误。 我之前从未调用过C#中的非托管代码,所以我有点不知所措。

您不能调用 DLL函数,因为它使用Delphi特定的string数据类型,在非Embarcadero产品中没有相应的。 (即使你的C#代码可以匹配Delphi的字符串类型的结构 ,你也需要使用DLL的内存管理器来分配内存,它几乎肯定不会导出。)

如果您能够更改DLL,则使参数具有类型PAnsiChar或PWideChar。 (根据你的C#声明,看起来你想要PAnsiChar。)这就是DLL应该一直使用的东西。

如果你不能更改DLL,那么在Delphi或C ++ Builder中编写一个使用PAnsiChar或PWideChar的包装DLL,然后将这些参数转发到原始的Delphi DLL。 或者向DLL供应商大声抱怨并请求使用对其他语言更友好的类型的新版本。

尝试

 [DLLImport(MyDLL.dll, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern IntPtr SomeFunction(string someString, string SomeOtherString); 

并使用带有返回值的Marshal.GetObjectForNativeVariant来获取.NET对象。

上述就是C#学习教程:从C#Code调用delphi DLL方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/961998.html

(0)
上一篇 2021年11月26日
下一篇 2021年11月26日

精彩推荐