遊戲王千金 2013年03月14日
C#中调用非託管DLL,本地编码正常,但在英文操作系统struct内的string里中文内容都变为?,高手帮助啊!!
出现这种C#中调用非託管DLL,本地编码正常,但在英文操作系统struct内的string里中文内容都变为?
第一反应是
在英文操作系统内找不到任何一个字符GB2312的内码,所以中文只能以“?”代替这个字符,

用 Encoding.Default.EncodingName.ToString()在英文系统调试输出: Western European (Windows)
注本地正常因为输出是简体中文(GB2312)

试过以下二种方式都无效
(1)在struct上添加 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
本地正常,英文操作系统还是“?”
(2)在struct上添加 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
本地乱码,英文操作系统乱码。

备注:
C
struct UserRecord
{
char name[128]; // name
..//略
C#


public struct UserRecord
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string name;
..//略

还在毫无思路,请高手帮助下..
...全文
62 点赞 收藏 4
写回复
4 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告