2009-12-03 3 views
0

구조가 예를 들어 있습니다Byte *를 wince6.0의 LPCWSTR로 변환하는 방법은 무엇입니까?

typedef struct { DWORD time;
바이트 * 메시지;
DWORD 크기;
} ACCP_MESSAGE_COMMAND_PARAM_T;

이제 master 및 client 엔드와 master를 통해 다음 데이터 20 ("MessageRequest", 30)을 사용하여 클라이언트에 요청합니다.

이제 클라이언트 측에서 % s을 (를) 사용하여 마스터가 요청한 메시지를 표시하려고합니다. 하지만 % c를 통해서만 % c를 (를) 표시 할 수 없습니다 .. 또한 iam이 BYTE *를 LPCWSTR로 변환하면 어떻게해야합니까? BCZ 때마다 나는

주세요 감사 Abhineet 아가 왈

+0

Windows Mobile6 또는 Windows CE6을 사용하고 있습니까? – Shaihi

답변

0

유니 코드 문자열을 보내는 답장 .. 예외를 throw 그렇게하고있는 중이 야? 문자열을 둘러싼 TEXT() 매크로가 없으므로 그렇지 않습니다. % S로 인쇄하십시오.

+0

어쨌든 그것은 오지 않을 것이다. 43929 PID : 386000a TID : 20a000e 예외 '데이터 중단'(4) : 스레드 -ID = 020a000e (pth = 94f994c8), Proc-Id = 0386000a (pprc = 97f54c20) 'onesegapp.exe'예외가 throw됩니다. , VM-active = 0386000a (pprc = 97f54c20) 'onesegapp.exe' 43930 PID : 386000a TID : 20a000e PC = 40065470 (coredll.dll + 0x00055470) RA = 40070a94 (coredll.dll + 0x00060a94) SP = 0026fa1c, BVA = 00000002 53957 PID : 3b30006 TID : 3ca0006 마스터 accp_callback CALLED 53961 PID : 3b30006 TID : 3ca0006 ACCP_MSG_RES_ERROR CmdId : 50397184 AppKind : 3 매개 변수 : & afd74 – Abhineet

+0

메시지에 종료가 포함되어 있습니까? 사용 된 크기는 얼마입니까? 왜 처음에는 LPWSTR을 전달하지 않습니까? – Shaihi

+0

메시지가 먼저 widechar으로 전송 되었습니까? 디버거에서 각 문자가 어떻게 표시되는지 확인하십시오. 넓은 char은 2 바이트를 차지해야합니다. – Shaihi

1

유니 코드를 읽어야합니다. 질문에있는 귀하의 데이터 ("MessageRequest")는 귀하의 의견과 동일하지 않습니다 (L "MessageRequest"). 그들은 다른 방식이며, 당신은 그것을 이해할 필요가 있습니다. 메모리 레이아웃을 살펴보고 레이아웃이 어떻게 배치되어 있는지 확인하십시오.

메시지를 어떻게 "표시"하고 싶지는 않지만, 여전히 유니 코드이고 클라이언트가 CE 기반이라면 아무 것도 할 수 없습니다. CE는 모든 API에 대해 유니 코드 만 사용합니다. 그것의 바탕 화면, 와이드 ("W"접미사) API를 사용하거나 # 응용 프로그램에서 유니 코드를 정의합니다. 또는 wcstombs 또는 WideCharToMultiByte를 사용하여 변환하십시오.

0

글쎄, 나는 해결책을 얻었다.

당신이 그때 우리는 다음과 같은 방법으로 사용할 수 있습니다 WideCharToMultiByte는를 사용하는 것보다 다른 LPCWSTR하는 BYTE의 *를 변환 할 경우

: 다음

BYTE * message; 
message="MessageRequest"; 
WCHAR msg[100]; 
msg = (WCHAR)message; //Copy "message" content into "msg" . 
LPCWSTR msg1; //Taken variable of LPCWSTR type 
msg1=(LPCWSTR)msg; 

그리고 DrawText에 (...)를 사용하여 표시; 창문에 그리고 적절한 메시지를 볼 수 있습니다.

+2

여기서는 BYTE *가 이미 멀티 바이트가 아닌 와이드 문자 인 데이터를 가리키고 있다고 가정합니다. 따라서 이것은 같은 것이 아닙니다. 사실 BYTE *를 TCHAR *에 캐스트하거나 새 위치에 간단한 memcpy를 수행 할 수 있습니다. – ctacke

+1

거기에 아무 문제가 dll 때문에 어떤 문제가 발생했습니다 그래서 위의 방법으로 내 문제가 해결되었습니다. byte * 값은 위의 방법을 통해서만 % s 방식으로 표시되는 dll에서 가져 왔습니다. 어쨌든 내가 보내는 모든 주석은 절대적으로 옳았습니다. 모든 메소드에 문제가되는 DLL을 제외하고 다른 예제를 체크했을 때 말이죠. – Abhineet

관련 문제