試圖用WM_COPYDATA從一個C 應用程式向一個AutoHotkey腳本發送SendMessage。
當它應該是。Hello World.
我還檢查了在SendMessage之后的GetLastError(),它輸出了0.
我一定是在COPYDATASTRUCT中做錯了什么。
AutoHotkey x64.
uj5u.com熱心網友回復:
你對StrGet()的使用是錯誤的:
你沒有在發送的資料中包括
std::string的空終止符,但是你沒有將COPYDATASTRUCT::cbData欄位的值傳遞給StrGet(),所以它將會尋找一個不存在的空終止符。所以你需要指定COPYDATASTRUCT::cbData欄位中的長度,例如:StringLen := NumGet(lParam A_PtrSize, "int"); StringAddress := NumGet(lParam 2*A_PtrSize); Data := StrGet(StringAddress, StringLen, Encoding);更重要的是,你沒有為
StrGet()指定一個Encoding,所以它將以腳本的本地編碼來解釋原始資料(見A_IsUnicode)。不要這樣做。對C 代碼所使用的編碼要明確。如果std::string持有一個UTF-8的字串,請指定"UTF-8"。如果std::string持有一個用戶默認的ANSI語言的字串,請指定"CP0"/code>。以此類推。你所看到的情況通常被稱為Mojibake,當單位元組字符資料在錯誤的編碼中被錯誤解釋時,就會發生這種情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/320298.html
標籤:
上一篇:CoTaskMemAlloc()是如何替代SHGetMalloc()的?
下一篇:從分割的影像中去除白色邊框

