У меня есть проблема, когда я связываюсь с DLL, которую я создал. Исключение составляет Unhandled exception at 0x000007FA17461069 (ntdll.dll)
, Странно то, что это происходит, только если я связываю DLL в приложении win32, но НЕ в консольном приложении win32. Кажется, что проблема связана с созданием потоков.
Стек вызовов выглядит следующим образом:
msvcr110d.dll!_callthreadstartex() Line 354 C
msvcr110d.dll!_threadstartex(void * ptd) Line 337 C
DLL содержит реализации для среды ACE proactor, использующей порты завершения операций ввода-вывода операционной системы. Он отлично работает в консольном приложении, но не в оконном приложении win32.
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: в соответствии с требованиями комментариев ниже:
Строка кода, которая выдает исключение: ACE_Service_Config::open(GetCommandLineA());
Я использую инфраструктуру конфигурации ACE, чтобы динамически загружать свою DLL с помощью файла svc.conf. Это единственная строка кода, которая должна быть записана в main
функция консольной программы.
Я попытался написать эту строку после того, как сообщение WM_CREATE было перехвачено. Это падает.
При создании консольного приложения ACE переопределит main, чтобы убедиться, что оно правильно инициализировано. При создании приложения Win32 Windows этот трюк не работает. Вы должны вызвать ACE :: init () и ACE :: fini () самостоятельно, см. Пример ACE_wrappers / tests / ACE_Init_Test.cpp, как вы можете это сделать.
Других решений пока нет …