我尝试为DirectShow注册自定义过滤器,但Windows无法正确注册。
当我运行“ASSERT Failed”框时,出现告诉我:
g_hInst is NULL at Line 388 in file "dllsetup.cpp"
该文件位于通常样本.. \ dshow \ baseclasses文件夹中的Microft SKD目录中。按“是”时,regsvr32.exe将成功返回。
我使用regedit检查了注册表项,并将InProcServer32 中的文件路径设置为 regsvr32.exe本身的目录。 (这证实了失踪的HINSTANCE)。 DllRegisterServer需要一个有效的DLL实例但不能得到它......但是为什么?
我因为这个错误的注册条目而被卡住了,过滤器无法添加到任何过滤器图表中(错误消息:DLL中的错误 - >这意味着它调用regsvr32.exe来“找到过滤器”)
答案 0 :(得分:1)
来自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);
不是很多可能的失败模式,评论非常明确。您可能只是忘了在DllMain()函数中调用DllEntryPoint()。只要regsvr32.exe加载DLL,就会调用它。如有疑问,请使用调试器。 Project + Properties,Debugging,将Command设置为c:\ windows \ system32 \ regsvr32.exe并在DllMain()函数上设置断点。按F5。