C#调用C++dll 传入参数为结构体问题

首先,C++的某个方法定义如下,输入参数是两个结构体

 

结构体的定义如下

 

那C#代码里要如何实现调用这个方法并传入结构体参数

传地址吧,参数是指针。C#同样定义结构体,传地址看看。

我这里有demo 就是c#调用c++ dll的 给你网盘 但是要visual 2019才能开项目。

 

链接:https://pan.baidu.com/s/1QTq8MnvavuT13etgpDzLWw 
提取码:7gm2 
复制这段内容后打开百度网盘手机App,操作更方便哦

参照https://www.cnblogs.com/hongfei/archive/2012/12/26/2834121.html,转递指针

  1. 在 C# 代码中定义图2中两个结构,顺序与 C++ 中的结构相同,BYTE 应该对应 C# 中的 BYTE,DWORD 应该对应 C# 的 ulong(我不确定),并在两个结构上加上 Attribute [StructLayout(LayoutKind.Sequential)] 。(定义成 class 应该也可以)
  2. 通过如下代码导入函数,一般该 dll 文件要放在项目的 bin 文件夹下。然后就可以在 C# 中使用该函数了。
[DllImport("对应DLL文件名.dll", EntryPoint = "IJ_ConfigureAndStartPort", CallingConvention = CallingConvention.Cdecl)]
        private static extern ulong IJ_ConfigureAndStartPort(LPCOMINFO lpComInfo,LPPRINTERINFO lpPrinterInfo);

你可以试试,我刚好以前用过这些功能,但我不能保证你能否成功。

通过 C# 调用 C++ 导出函数使用到了 P/Invoke 技术。你可以搜搜 P/Invoke 的相关知识。