解决方案 »

  1.   

    目测,你是想在托管代码回去 string类型的 userName 和 passWord 转换成 非托管的 char * 类型,
    你可以尝试使用:
                        string userName;
                        string passWord; 
                        // etc 获取 userName,passWord的值!
                        IntPtr ptrUserName=Marshal.StringToHGlobalAnsi("userName");
                        IntPtr ptrPassWord=Marshal.StringToHGlobalAnsi("passWord");
                       // etc 传给非托管代码 ptrUserName,ptrPassWord。
      

  2.   

     /* 将结构体转换成字节数组的封装函数 */
            public static byte[] StructToBytes(object structObj)
            {
                LoginReq login = (LoginReq)structObj;            login.userName = (new string(login.userName)).PadRight(MAX_USER_NAME_LENGTH, '\0').ToCharArray();
                login.passWord = (new string(login.passWord)).PadRight(MAX_USER_NAME_LENGTH, '\0').ToCharArray();            //得到结构体的大小
                int size = Marshal.SizeOf(login);
                byte[] bytes = new byte[size];            //分配结构体大小的内存空间
                IntPtr structPtr = Marshal.AllocHGlobal(size);            //将结构体拷到分配好的内存空间
                Marshal.StructureToPtr(login, structPtr, false);
                LoginReq loginReq = (LoginReq)Marshal.PtrToStructure(structPtr, typeof(LoginReq));            //从内存空间拷到byte数组
                Marshal.Copy(structPtr, bytes, 0, size);            //释放内存空间
                Marshal.FreeHGlobal(structPtr);            //返回byte数组
                return bytes;
            }