【发布时间】:2017-01-09 12:26:21
【问题描述】:
我正在创建一个 dll 文件。
我的代码:
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
void test() {
EnumWindows(EnumWindowsProc, NULL);
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
char class_name[80];
char title[80];
GetClassName(hwnd, (LPWSTR) class_name, sizeof(class_name));
GetWindowText(hwnd, (LPWSTR) title,sizeof(title));
std::string titlas(title);
std::string classas(class_name);
Loggerc(titlas);
Loggerc("Gooing");
return TRUE;
}
那我就打test()。
在日志中,titlas 为空,代码停止。
当我在带有 CodeBlock 的 Win32 应用程序中尝试此代码时,一切正常,所有标题都显示出来。但在 dll 中,它不起作用。
问题出在哪里?
【问题讨论】:
-
需要注意的一点:
char*不是LPWSTR -
EnumWindows有效。您的代码对编译器撒谎,这就是破坏它的原因。你保证你的缓冲区是两倍大小。从那里只会变得更糟。
标签: c++ string winapi unicode vc10