将字符串转换为IntPtr

时间:2011-04-12 10:05:01

标签: sendmessage

抱歉,我的英语很差。 我使用

将字符串转换为IntPtr
COPYDATASTRUCT cd = new COPYDATASTRUCT();
            cd.dwData = 0;

            cd.lpData = Marshal.StringToHGlobalAuto(Msg).ToInt32();
            cd.cbData = Msg.Length;
  Marshal.StringToHGlobalAuto(Msg);

并使用SendMessage方法将其发送到另一个窗口 当我收到它并使用

读取IntPtr作为字符串
COPYDATASTRUCT CD = (COPYDATASTRUCT)Marshal.PtrToStructure(lParam, typeof(COPYDATASTRUCT));
 byte[] B = new byte[CD.cbData]; 
IntPtr lpData = new IntPtr(CD.lpData);
string temp = Marshal.PtrToStringUni(lpData);
Marshal.Copy(lpData, B, 0, CD.cbData);
string strData = Encoding.Default.GetString(B);

我收到这些数据 M!\ 0S \ 0G \ 0 \ 0 @ \ 01 \ 0 | \ 01 \ 0 | \ 0C \ 0:\ 0 \\ 0U \ 0 \ 0E \ 0R \ 0 \ 0 \\ 0F \ 0 \ 0A \ 0升\ 0 \ 0A \ 0

当我制作strData.Replace(“\ 0”,“”)

我收到了我的消息,但它被截断了。 !MSG @ 1 | 1 | C:\用户\ f.alsa

原始邮件是MSG!@ 1 | 1 | C:\ Users \ f.alsayyed \ Desktop \ File.ktb

1 个答案:

答案 0 :(得分:0)

对我来说,看起来你的替换函数在字符串结束之前发现零终止,因为看起来你的接收数据在字符串中也包含零。