2011-04-12 95 views
0

對不起,我的英語很差。 我使用將字符串轉換爲IntPtr

COPYDATASTRUCT cd = new COPYDATASTRUCT(); 
      cd.dwData = 0; 

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

,並使用SendMessage函數方法 用它發送到另一個窗口,當我收到它,並宣讀的IntPtr作爲字符串轉換字符串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); 

我收到這個數據 中號\ 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」,「」)

我收到我的消息,但它被截斷。 ! 味精@ 1 | 1 | C:\用戶\ f.alsa

原始消息是味精@ 1 | 1 | C:\用戶\ f.alsayyed \桌面\ File.ktb

回答

0

對我來說它看起來像你的替換函數找到了一個零終止之前,然後在字符串結束,因爲它似乎你收到的數據也包含零字符串。