日期:2014-05-19  浏览次数:21151 次

非托管字符串转换为托管字符串的问题
在做一个三维软件的二次开发的时候,遇到一个难题字符串转换的难题。

应用是这样的:
通常一个文件右键查看属性的时候有几个属性tab页,我要处理的文件有一个“自定义”tab属性页。(好像这个东西和三维软件的关系不大,和操作系统关系比较大)
利用程序读取出用户自定义的属性名称和值。

我使用了一个外国人写的类,读取出的汉字都是乱码。做了很多测试没有什么大的进展。
将字符转换为gb2312的时候,汉字不是乱码,但是被截断了。

我想问题可能出现在以下代码里:
case   VarEnum.VT_LPSTR:
return   Marshal.PtrToStringAnsi(this.Ptr);

我做了测试性的修改,得到的最好的结果是看到汉字了,但是被截断了。

请熟悉win32/C++/能解决这个问题的高手给予指点。

我使用的第三方包在这里:http://www.jasonnewell.net/portal/Products/SolidEdgeFilePropertyAPI/tabid/83/Default.aspx

------解决方案--------------------
什么是截断?是不是长度认错了?本来有10个字但只出来5个?
你用取长度看看呢。Ptr类型改成w_char[]看看。
------解决方案--------------------
你先把gb2312转unicode再传给.net
http://msdn2.microsoft.com/en-us/library/ms235262(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/42zy2z41(VS.80).aspx