Отладки Функция Dllregisterserver


У меня есть COM DLL, построенная с помощью скрипта. Проект Visual studio недоступен. При регистрации dll с помощью команды regsvr32 "c:windowssystem32dllname.dll " сообщение не отображается.

Я добавил DebugBreak() в функцию DllRegisterServer, а также в DllMain, чтобы ожидать отображения диалогового окна отладки. Однако ничего не произошло.

Записи, ожидаемые от библиотеки DLL, не добавляются в реестр.

Любые предложения о том, что может отсутствовать для DLL, чтобы зарегистрируйтесь правильно и почему сообщение не отображается.

Как мне это отладить.

2 3

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