2009-12-03 51 views
0

我有一個結構說例如何將字節*轉換爲wince6.0中的LPCWSTR?

typedef結構{ DWORD時間;
BYTE *消息;
DWORD size;
} ACCP_MESSAGE_COMMAND_PARAM_T;

現在,這是主要和客戶端,並通過主要我們向客戶端請求以下數據20,「MessageRequest」,30。

現在,在客戶端我想顯示主機使用%s請求的消息。 但我只能通過%c顯示而不是%s。 此外,如果iam將字節*轉換爲LPCWSTR,我應該如何實現? BCZ每當我這樣做,它拋出一個異常..

請回復 感謝 Abhineet阿加瓦爾

+0

您使用的是Windows Mobile6還是Windows CE6? – Shaihi 2009-12-03 13:15:14

回答

0

你發送以Unicode字符串? 圍繞字符串沒有TEXT()宏,所以我猜不是。嘗試用%S打印。

+0

無論如何它不會來。它會拋出以下異常: 43929 PID:386000a TID:20a000e異常'Data Abort'(4):Thread-Id = 020a000e(pth = 94f994c8),Proc-Id = 0386000a(pprc = 97f54c20)'onesegapp.exe' ,VM-活性= 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 Master accp_callback CALLED 53961 PID:3b30006 TID:3ca0006 ACCP_MSG_RES_ERROR CmdId:50397184 AppKind:3 param:&afd74 – Abhineet 2009-12-03 10:45:10

+0

該消息是否包含終止?用於什麼大小? 你爲什麼不首先通過LPWSTR? – Shaihi 2009-12-03 11:00:42

+0

消息是否以widechar的形式發送?在調試器中查看每個字符是如何表示的。一個寬字符應占用2個字節。 – Shaihi 2009-12-03 11:05:36

1

您需要閱讀Unicode。您的問題中的數據(「MessageRequest」)與您的評論(L「MessageRequest」)不同。他們是不同的,你需要明白這一點。看看內存視圖,看看它們是如何佈局的。

你不是說你想怎麼「顯示」的消息,但如果它仍然是unicode的,而客戶端是CE爲基礎的,那麼就沒有什麼關係。 CE只對所有的API使用Unicode。如果是桌面,請在您的應用中使用寬(「W」後綴)API或#define UNICODE。或者使用wcstombs或WideCharToMultiByte轉換它。

0

那麼我得到了它的解決方案。

如果要轉換BYTE *到LPCWSTR比使用其他調用WideCharToMultiByte那麼我們可以通過以下方式使用:

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 2009-12-23 16:16:13

+1

不,有沒有在DLL中的問題,因爲我得到問題 所以在上述方法做我的問題得到解決。只有通過上述方法才能從以%s方式顯示的dll導入byte *值。無論如何,你發送的評論是絕對正確的,當我檢查除了我的DLL正在創造所有的方法問題的其他例子。 – Abhineet 2009-12-24 05:09:22