我有一个与读卡器交互的 C++ DLL。它需要一个指向数据结构的指针,这不是问题。但是,当尝试与 C# 中的 DLL 交互时,我遇到了各种问题。写入受保护内存的错误,执行 getData 命令后应用程序刚刚关闭等。这就是我们所拥有的。
标头中的 C++ 方法
void readCard(cardData* dataBuffer);
C# 代码
Wrapper.cs
public struct cardData{
Byte[] data01;
Byte[] data02;
}
[dllImport("card.dll")]
public static extern void readCard(ref cardData data);
form1.cs
Wrapper.cardData tmpData = new wrapper.cardData();
tmpData.data01 = new Byte[];
tmpData.data02 = new Byte[];
readCard(ref tmpData);
我还尝试使用 Marshal.StructureToPtr 将 cardData 作为 IntPtr 传递,当我返回时它没有返回任何数据尝试将 ptr 读入结构 Marshal.PtrToStructure ...
我一直在尝试使用帮助文件和其他帖子来解决这个问题,因为似乎很多人在尝试使用 C/C++ DLL 时遇到了麻烦。我什至尝试用 C++ 编写整个内容,并让它返回一个字符串,其中包含在 C++ DLL 中解析的数据,但这会引发读取/写入受保护内存错误