public struct _MSG_BODY_USER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string szStuID;
} _MSG_BODY_USER user = new _MSG_BODY_USER();user.szStuID = userid;
要将user传给一个ref int的变量pData ,其作用是取出该结构体的首地址! 传到一个c++的ocx控件中去,该控件是根据地址读取值的!
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string szStuID;
} _MSG_BODY_USER user = new _MSG_BODY_USER();user.szStuID = userid;
要将user传给一个ref int的变量pData ,其作用是取出该结构体的首地址! 传到一个c++的ocx控件中去,该控件是根据地址读取值的!
然后传递ref user
你在C#里也可以声明成ref _MSG_BODY_USER
都来表示指针么
你的C++里不用管_MSG_BODY_USER是什么,它不过表示个地址,或者说指针不是让你改C++的头文件,是让你改c#的原型声明
user.szStuID = userid;int size = Marshal.SizeOf(user);
IntPtr ps = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(structure, ps , false);
int ret = CVSINTERFACELib.CvsInterface.OperateUser( ref ps.ToInt32() , size);
int ret = CVSINTERFACELib.CvsInterface.OperateUser( ref ps.ToInt32() , size);会插入乱码 何解 - -!
int size = Marshal.SizeOf(user); IntPtr structPtr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(user, structPtr, false);
int p = structPtr.ToInt32(); int j = axCvsInterface1.OperateUser(ip1, id, ref p, size);
这样的会插入乱码 就是地址不对 !
如果没有,你就发给我,我来帮你用用。:[email protected]
考虑一下,是不是你的字符串,编码不正确
也许你的C++程序用的不是UTF-8,而C#默认是用UTF-8你再给user赋值时,最好先转换一下如
user.szStuID = Encoding.GetEncoding("GB2312").GetString(Encoding.UTF8.GetBytes("你的字符串"));