我在C ++中有这个结构。
struct test
{
int num;
int quest;
wchar_t name[64];
};
int main()
{
test mystruct;
mystruct.num = 12;
mystruct.quest = 2;
memcpy(mystruct.name,var1,sizeof(var1)); // var1 is an char [64] with the request name
send(Socket->ConnectSocket, (char*)&mystruct, sizeof(test), 0);
}
另一方面,我有以下代码,用C#编写
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct test
{
public int num;
public int quest;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string name;
}
........
test structtest;
this.Receiver_og.Receive(this.buffer);
this.structtest = (test)Marshal.PtrToStructure(gcHandle.AddrOfPinnedObject(), typeof(test));
除了我只看到中文字母的字符串名称外,这段代码工作正常。我该如何解决?
答案 0 :(得分:1)
您正在将一个char数组(包含8位字符)复制到wchar_t数组中,该数组应包含16位unicode字符。简单地复制字符会给你一个16位字符,它是两个8位字符的组合,因此就是垃圾。您需要使用MultiByteToWideChar API将8位字符转换为unicode字符。
答案 1 :(得分:0)
如果这是您的所有代码,您似乎没有设置连接。
据我所知,虽然我还没有使用c ++和c#中的套接字,但你需要通过创建套接字,设置选项,绑定,监听然后进行通信来设置客户端/服务器。 / p>
您应该查看Beej's guide to Network Programming,他们几乎拥有设置客户端/服务器程序所需的任何内容,特别是Fifth Chapter,他们会引导您完成设置连接的过程。