2013-03-28 4 views
1

У меня проблема при ссылке на созданную мной DLL. Исключение составляет Unhandled exception at 0x000007FA17461069 (ntdll.dll). Странно, что это происходит только в том случае, если я связываю DLL в приложении win32, но НЕ в консольном приложении win32. Проблема, похоже, связана с созданием потоков.Необработанное исключение, связанное с DLL

Стек вызовов выглядит следующим образом:

msvcr110d.dll!_callthreadstartex() Line 354   C 
msvcr110d.dll!_threadstartex(void * ptd) Line 337  C 

Библиотека DLL содержит реализации для платформы ACE proactor, используя операционные системы I порты завершения ввода/вывода. Он отлично работает в консольном приложении, но не в оконном приложении win32.

Любая помощь будет оценена по достоинству.

EDIT: в соответствии с просьбой комментарии ниже:

Строка кода, который бросает исключение составляет ACE_Service_Config::open(GetCommandLineA());

Я использую рамки ACE конфигурации, чтобы таким образом я загрузить мой DLL динамически с файлом svc.conf. Это единственная строка кода, которая должна быть записана в функцию main консольной программы.

Я пробовал писать эту строку после того, как сообщение WM_CREATE поймано. Он падает.

+0

Что произойдет, если вы запустите его в режиме деблокирования вместо отладки? – Arun

+0

Узнайте, где выбрано исключение. Убедитесь, что вы используете DLL и EXE, связанные с одними и теми же DLL, а не, например. один из которых использует вариант отладки, но не другой. Проверьте журнал, чтобы узнать, какая именно DLL загружена. Узнайте, где находятся точные различия между рабочими и нерабочими версиями. Найдите код, который выдает исключение. Дистиллируйте минимальный пример и разместите здесь. –

+0

@ Арун: ммм ... еще не пробовал. Я попробую. Однако при запуске в режиме выпуска мне придется перестроить все мои библиотеки, которые займут некоторое время. Есть ли разница между режимом выпуска и отладки? – l3utterfly

ответ

2

При создании консольного приложения ACE переопределит главный, чтобы убедиться, что он правильно инициализирован. При создании приложения windows win32 этот трюк не работает. Вы должны сами вызвать ACE :: init() и ACE :: fini(), см. ACE_wrappers/tests/ACE_Init_Test.cpp для примера, как вы можете это сделать.

+0

Сделал трюк. Большое спасибо. Кстати, у меня есть еще один вопрос ACE, вы, похоже, очень опытный ACE, поэтому мне интересно, можете ли вы мне помочь в этом. – l3utterfly

+0

Ссылка на вопрос: http://stackoverflow.com/questions/15705227/unhandled-exception-when-using-ace-service-config. Большое спасибо. – l3utterfly

+0

Просто добавил комментарий, списки рассылки ACE - это действительно лучшее место, чтобы спросить. –

Смежные вопросы