Отладки Функция Dllregisterserver
У меня есть COM DLL, построенная с помощью скрипта. Проект Visual studio недоступен. При регистрации dll с помощью команды regsvr32 "c:windowssystem32dllname.dll
" сообщение не отображается.
Я добавил DebugBreak() в функцию DllRegisterServer, а также в DllMain, чтобы ожидать отображения диалогового окна отладки. Однако ничего не произошло.
Записи, ожидаемые от библиотеки DLL, не добавляются в реестр.
Любые предложения о том, что может отсутствовать для DLL, чтобы зарегистрируйтесь правильно и почему сообщение не отображается.
Как мне это отладить.
2 ответа:
DebugBreak
ломается под отладчиком и завершает работу процесс, который не отлаживается.Вам нужно настроить Visual Studio в разделе параметры проекта C++, отладка, чтобы она запустилась C:\Windows\system32\regsvr32.exe с вашей DLL, то есть
"$(TargetPath)"
или полный путь явно. Начните отладку, и ваши точки останова будут поражены.Обратите внимание, что в 64-битной ОС для отладки 32-битной DLL вам понадобится C:\Windows\syswow64\regsvr32.exe.
UPD. Тот факт, что ни один проект Visual Studio не доступен на самом деле это не препятствие. Поддельный проект, чтобы просто запустить сеанс отладки с правильной командной строкой, будет работать нормально.
Кроме того, если вы все еще можете обновить исходный код, вы можете добавить
MessageBox
вDllRegisterServer
, esp. вместоDebugBreak
запустите регистрацию COM, откройте окно сообщения, затем присоедините отладчик Visual Studio (без необходимости иметь VS project), установите точки останова и закройте окно сообщения, чтобы позволить выполнению продолжаться и достичь точек останова. интерес.
Я нахожу, что в таких ситуациях очень полезен RegSvrEx. Это дает гораздо лучший диагностический результат, и поскольку у вас есть источник, вы можете подключить отладчик.
Http://www.codeproject.com/Articles/3505/RegSvrEx-An-Enchanced-COM-Server-Registration-Util