2011-04-12 2 views
0

죄송합니다. 내 영어가 형편 없습니다. 내가이 데이터 M \ 0S를받을문자열을 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); 

나는

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

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

를 사용하여 문자열로를 IntPtr을 내가 그것을받을 때 sendMessage 메소드 를 사용하여 다른 창으로 보내 읽기를 IntPtr로 문자열을 변환 \ 0G \ 0! \ 0 @ \ 01 \ 0 \ \ 0 \ 0 \ 0C \ 0 : \ 0 \\ 0U \ 0s \ 0e \ 0r \ 0s \ 0 \\ 0f \ 0 \ 0a \ 0l \ 0s \ 0a \ 0

내가 strData.Replace ("\ 0", "")를 만들 때

메시지가 수신되었지만 잘 렸습니다. ! MSG @ 1 | 1 | C : 사용자 \ \ f.alsa

원본 메시지는 MSG입니다 @ 1 | 1 | C :! 사용자 \ \ f.alsayyed \ 바탕 화면 \ File.ktb

답변

0

나에게 그것은 당신의 교체 기능이 마치 문자열이 끝나는 곳에서 제로 터미네이션을 찾은 것처럼 보입니다. 수신 된 데이터에는 문자열 내부에 0이 포함되어있는 것처럼 보입니다.