EnumWindows не работает

Я создаю файл 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 пусто и код останавливается.

Когда я пытаюсь этот код в приложении Win32 с CodeBlock, все работает, все названия показывают. Но в dll это не работает.

В чем проблема?

0

Решение

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);

Учитывая, что начиная с VS2005 по умолчанию строится в режиме Unicode (вместо ANSI / MBCS) и что у вас есть (уродливый стиль C) (LPWSTR) бросает, я предполагаю, что вы получили ошибки во время компиляции при передаче строковых буферов на основе символов в API, такие как GetClassName () и GetWindowText (), и вы пытались исправить эти ошибки с помощью приведений.
Это неверно. Компилятор действительно помогал вам с этими ошибками, поэтому, пожалуйста, следуйте его советам, а не отбрасывайте ошибки компилятора.

Если предположить, Unicode сборки, вы можете использовать wchar_t а также std::wstring вместо char а также std::string, а также _countof() вместо sizeof() чтобы получить размер буферов в wchar_ts, не в байтах (charс).

Например.:

// Note: wchar_t used instead of char
wchar_t class_name[80];
wchar_t title[80];

// Note: no need to cast to LPWSTR (i.e. wchar_t*)
GetClassName(hwnd, class_name, _countof(class_name));
GetWindowText(hwnd, title, _countof(title));

// Note: std::wstring used instead of std::string
std::wstring titlas(title);
std::wstring classas(class_name);

Если другие части вашего кода действительно используют std::stringвы можете преобразовать текст в кодировке UTF-16, хранящийся в std::wstring (возвращается Windows API) к тексту в кодировке UTF-8 и сохранить его в std::string экземпляров.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]