C#调C++写的DLL的结构体参数问题
C#调C++写的DLL里的一个函数
原型是:
_DLLIMP long CALL_CONVENT VLVmcConnectVoc(
     long    VmcHandle,
     const PVOCLINK_PARAM    pVocSrv,
     long*    pVocHandle
);
其中结构体 VOCLINK_PARAM 的定义是
typedef struct _VOCLINK_PARAM{
     TCHAR    sVocIp[16];
     UINT    nPort;
}VOCLINK_PARAM,*PVOCLINK_PARAM;
我在C#里定义了结构体 VoiceLinkParam
[StructLayout(LayoutKind.Sequential)]
struct VoiceLinkParam
{
     public byte[] voiceip;
     public uint port;
}
调用如下:
VoiceLinkParam voice_link_param = new VoiceLinkParam();
string voiceip = "192.168.4.44";
voice_link_param.port = 3000;
int voc_handle = 0;
int voc_connect_result = ClassVMC.VLVmcConnectVoc(vmc_handle,ref voice_link_param, ref voc_handle);
if (voc_connect_result == VMC_ERR_SUCCESS)
{
     MessageBox.Show("Connect Voice Success.");
}
else
{
     MessageBox.Show("Connect Voice fail.Result=" + voc_connect_result);
}
class ClassVMC
{
     [DllImport("VLVmc.dll", EntryPoint = "VLVmcConnectVoc")]
     public static extern int VLVmcConnectVoc(int vmc_handle,ref VoiceLinkParam voc_param, ref int voc_handle);
}
可是程序在红色处报错:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏;
估计是C#结构体定义的问题,正确的结构体定义应该是怎么的呢,请高手指点!
------解决方案--------------------C# 到 c++ 参数 对照表
类型 对照  
一定 要对 ,在 看看 为什么 要 那么传
------解决方案--------------------C# 到 c++ 参数 对照表
------解决方案--------------------C# 到 c++ 参数 对照表
------解决方案--------------------
如需要阅读该回复,请登录或注册CSDN!
------解决方案--------------------结构体需要我给你的那样转换,至于为什么会“程序直接奔溃”,你可以这样确定:
你把工程属性:调试-》勾上“启用非托管代码调试”,
F11直接根据C++的代码。。。。