0

我在 C++ 中有这个功能

extern "C" __declspec(dllexport) void SendPacketToServer(BYTE *packet, int Length)
{
    _SendToServer(packet, Length);
}

如何在 C# 中使用它?

到目前为止我试过这个:

[DllImport("DAFramework 1.0.dll", SetLastError = true)]
internal static extern void SendPacketToServer(IntPtr packet, int length);

            unsafe 
            {
                fixed (byte* pByte = new byte[] { 0x13, 0x00 })
                {
                    IntPtr data = new IntPtr((void*)pByte);
                    SendPacketToServer(data, 2);
                }
            }   

我做错了什么吗?如果是这样,我怎样才能使它工作?我收到错误:Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我可以用更简单的方法吗?

4

2 回答 2

0

您必须设置适当的调用约定:

[DllImport("DAFramework 1.0.dll", SetLastError = true, CallingConvention=CallingConvention.Cdecl)]

因为您的本机函数声明了它(extern "C" __declspec(dllexport))。

于 2012-12-29T08:18:24.520 回答
0

我认为这是一个类似的问题,在我的情况下是由于char * 参数。我认为您必须事先分配参数。

因此,您唯一的解决方案是将字符串参数作为 IntPtr 传递。使用 Marshal.StringToHGlobalAnsi 分配内存

尝试在 c# 中使用 dllimport 读取或写入受保护的内存

于 2015-03-02T11:10:15.020 回答