[英]AutoIt and C++. Unicode
我用C ++編寫了一個DLL:
extern "C" __declspec(dllexport) void Msg(std::wstring filename)
{
MessageBox(NULL, filename.c_str(), L"", MB_OK);
}
當我嘗試從AutoIt調用DLL時:
DllCall("mydll.dll", "none:cdecl", "Msg", "wstr", @AutoItExe)
我收到一條帶有少量象形文字的消息。 問題是什么?
編寫導出的DLL函數時,不應在其接口中使用任何C ++庫類型,因為它們依賴於編譯器,版本甚至解決方案(DEBUG或NDEBUG)。
如果這樣做,則必須確保調用者使用這些類型的相同實現。 這里不是這種情況。
您應該限制DLL導出的函數,使其僅在其接口中使用與C類型兼容的類型,或其他相互同意的類型。
在DLL實現中,您可以做任何您想做的事情!
在這種情況下,您需要用LPCWSTR
(aka const wchar_t*
)替換std::wstring
參數。 AutoIt的DllCall
文檔中DllCall
說明:
WSTR
一個UNICODE寬字符串(至少分配了65536個字符)。...
WINDOWS API類型:LPCWSTR / LPWSTR
AutoIt類型:WSTR
從MSDN的Windows數據類型文檔中:
LPWSTR
指向以空字符結尾的16位Unicode字符的指針。 有關更多信息,請參見字體使用的字符集。在WinNT.h中聲明此類型,如下所示:
typedef WCHAR *LPWSTR;
...
LPCWSTR
指向以16位Unicode字符為常數的,以空字符終止的常量的指針。 有關更多信息,請參見字體使用的字符集。在WinNT.h中聲明此類型,如下所示:
typedef CONST WCHAR *LPCWSTR;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.