Dan*_*Dan 5 .net c# delphi dll
我试图从C#ASP.NET代码调用Delphi函数.函数的声明如下所示:
function SomeFunction(const someString, SomeOtherString: string): OleVariant;
Run Code Online (Sandbox Code Playgroud)
从我的C#代码我有这个代码:
[DLLImport(MyDLL.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
public static extern object SomeFunction(string someString, string SomeOtherString);
Run Code Online (Sandbox Code Playgroud)
每次我调用此方法并将其存储为对象时,我都会收到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供应商大声抱怨并请求使用对其他语言更友好的类型的新版本.
| 归档时间: |
|
| 查看次数: |
3726 次 |
| 最近记录: |