3
我有一個簡單的C++ DLL調用的MessageBox顯示文本傳遞一個完整的LPCSTR到C++,從蟒蛇文本DLL
#include <Windows.h>
#define LIBDLL extern "C" __declspec(dllexport)
LIBDLL void Display(LPCTSTR lpInput) {
MessageBox(0, lpInput, 0, 0);
}
bool __stdcall DllMain(void* hModule, unsigned long dwReason, void* lpReserved) {
switch (dwReason)
{
case 1:
break;
case 0:
break;
case 2:
break;
case 3:
break;
}
return true;
}
而Python代碼僅傳遞了一個字符串顯示在DLL,它看起來是這樣的
import ctypes
sampledll = ctypes.WinDLL('SampleDll.dll')
sampledll.Display('Some Text')
而且只顯示第一個字母,即使我使用std ::法院
如何讓它顯示我傳遞給它的所有文本?
來完成請參閱[MessageBox中的文件(https://msdn.microsoft.com/en-us /library/windows/desktop/ms645505%28v=vs.85%29.aspx)。您將看到所需的參數是「LPCTSTR」,而不是「LPCSTR」。如果您不知道其中的差別,那麼大致瞭解ANSI和寬字符字符串之間的區別。所以很可能你需要傳遞使用寬字符的字符串。 – PaulMcKenzie
改變了它,但仍輸出相同的結果 – MonSh1rE
確保你發送正確的字符串類型到'MessageBox'函數。我不知道Pyhon,我不知道你發送給DLL函數的字符串是否是寬字符串。底線 - 你需要你的Python代碼和DLL來同意來回發送的字符串類型。目前看來情況並非如此。而且,std :: cout做同樣的事情的原因也是出於同樣的原因。如果要查看整個字符串(如果字符串是一個寬字符串),請使用'std :: wcout'。 – PaulMcKenzie