Отладки Функция 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