簡體   English   中英

AutoIt和C ++。 統一

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM