繁体   English   中英

从C#传递到非托管dll后,参数不正确

[英]Parameters are incorrect after passing from C# to unmanaged dll

整天都在尝试并搜索各种资源,但找不到解决方案。 我正在从c#调用导入的非托管dll函数。

C ++类如下所示:

class  MyModule
{
public:
    MYMODULEDLL_API int __cdecl Init(int);
...

在C#中定义如下:

 [DllImport("MyModule_x64.dll", EntryPoint = 
  "?Init@MyModule@@QEAAHH@Z", CallingConvention = CallingConvention.Cdecl)]
    public static extern int Init(int len);

像这样调用:

Init(configFileName.Length);

我可以在调试器中看到正在调用dll中的适当功能,但是传递的参数已损坏,显示的值与传递的值完全不同。 字符串参数也会发生这种情况。 无论如何,要解决托管代码和非托管代码之间的参数编组问题吗?

您不能通过DLLImport或PINVOKE使用C ++类,因为它仅适用于C样式函数。

如果要在C#中使用C ++类,则需要使用C ++ / CLI。 您可以在本机C ++中创建一个非托管dll,然后创建一个从本机dll调用方法的简单C ++ / CLI包装器。 之后,您可以简单地将C ++ / CLI托管dll添加到项目中,并将其用作C#类,而无需任何DllImport和PINVOKE。 这将是一个非常灵活的解决方案,易于扩展。 在MSDN上,您可以找到有关如何使用C ++ / CLI的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM