这是dll里结构体的定义。
/* 连接用户信息结构定义*/
typedefstruct tmConnectInfo_t
{
unsigned int dwSize; //该结构的大小,必须填写
char pIp[32]; //连接服务器的IP地址
int iPort; //服务器连接的端口
char szUser[32]; //登录用户名
char szPass[32]; //登录用户口令
int iUserLevel; //登录用户级别,主要用户DVS的一些互斥访问资源
unsigned char pUserContext[USER_CONTEXT_SIZE]; //用户自定义数据
}tmConnectInfo_t;
我用 c# 语言,多次尝试封送结构体,都无法正确执行。
第一种错误写法:
//报错,提示 指定的数组不属于需要的类型
//[StructLayout(LayoutKind.Explicit)]
//public struct tmConnectInfo_t
//{
// [System.Runtime.InteropServices.FieldOffsetAttribute(0)]
// public int dwSize;
// [System.Runtime.InteropServices.FieldOffsetAttribute(4)]
// public char[] pIp;
// [System.Runtime.InteropServices.FieldOffsetAttribute(36)]
// public int iPort;
// [System.Runtime.InteropServices.FieldOffsetAttribute(40)]
// public char[] szUse;
// [System.Runtime.InteropServices.FieldOffsetAttribute(72)]
// public char[] szPass;
// [System.Runtime.InteropServices.FieldOffsetAttribute(104)]
// public int iUserLevel;
// [System.Runtime.InteropServices.FieldOffsetAttribute(108)]
// public char[] pUserContext;
//}
第二种错误写法:
//现在是,调试时,提示内存损坏,运行exe ,程序停止工作。
//[StructLayout(LayoutKind.Sequential)]
//public struct tmConnectInfo_t
//{
// public uint dwSize;
// public string pIp;
// public int iPort;
// public string szUser;
// public string szPass;
// public int iUserLevel;
// public string pUserContext;
//}
该dll 是用 c++ 编写的,不是我编写的。我看过非托管dll封送结构体的资料,都没有解决问题,希望能熟悉c#语言和非托管DLL的程序员帮忙。
就是结构体的写法,使用 C# 语言写出来。