regsvr32.exe выдает ASSERT_ERROR с hInstance - PullRequest
1 голос
/ 28 января 2012

Я пытаюсь зарегистрировать пользовательский фильтр для DirectShow, но окна не регистрируют его правильно.

Когда я запускаю окно «ASSERT Failed», появляется сообщение:

g_hInst is NULL at Line 388 in file "dllsetup.cpp"

Файл находится в каталоге Microft SKD в папке обычных образцов .. \ dshow \ baseclasses.При нажатии «Да» regsvr32.exe успешно возвращается.

Я проверил запись реестра с помощью regedit, и путь к файлу в InProcServer32 был установлен в каталог regsvr32.exe.(что подтверждает отсутствие HINSTANCE).DllRegisterServer нужен действительный экземпляр DLL, но я не могу его получить ... но ПОЧЕМУ?

Я застрял из-за этой неправильной записи реестра, фильтр не может быть добавлен в любой граф фильтра (сообщение об ошибке: Ошибка в DLL -> что означает, что он вызывает regsvr32.exe для «поиска фильтра»)

1 Ответ

1 голос
/ 29 января 2012

Из include / BaseClasses / dllsetup.cpp:

// g_hInst handle is set in our dll entry point. Make sure
// DllEntryPoint in dllentry.cpp is called
ASSERT(g_hInst != 0);

Не много возможных режимов сбоев, комментарий довольно явный. Вы, вероятно, просто забыли вызвать DllEntryPoint () в своей функции DllMain (). Который вызывается, как только regsvr32.exe загружает DLL. Используйте отладчик в случае сомнений. Project + Properties, Debugging, установите для команды значение c: \ windows \ system32 \ regsvr32.exe и установите точку останова в функции DllMain (). Нажмите F5.

...