cout и printf работает на Dll, встроенном в отладку не релиз

Я построил DLL, которая вставляется в консольное приложение, обычно через SetWindowHookEx. Для DLL важно выводить информацию на консоль, которую я делал с std :: cout. DLL была близка к завершению, пока я не попытался собрать DLL в режиме выпуска, что сделало все строки cout бесполезными. Я проверил, что DLL внедряет и выполняет, выполняя простую разыменование null, которое вызывает сбой программы в функции dllmain. Та же история с std :: printf.

void onAttach()
{
//WARNING THIS IS A DEMONSTRATION
std::cout<<"test"<<std::endl;
//int* intPtr = 0;
//*intPtr = 3; //This causes a crash
}

// entry point
BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls ( hModule );
CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) onAttach, NULL, 0, NULL );
return true;
break;

case DLL_PROCESS_DETACH:
return true;
break;
}
}

Я действительно не знаю, как подойти к этой проблеме. Компонент Release как-то исключает зависимости?

Я использую MSVS 2010 и настройки конфигурации выпуска / отладки по умолчанию. Dll отладки составляет около 5137 КБ, а dll выпуска — только 23 КБ.

4

Решение

Ты не должен делать что-нибудь в DllMain, которая зависит от другой DLL. Вы нарушаете это как минимум три раза: printf а также std::cout зависит от CRT (который, в свою очередь, зависит от Win32 DLL) и CreateThread зависит от Kernel32.DLL.

DllMain предназначен для простых вещей, таких как обнуление переменных и т. д.

0

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

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

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