我最近一直在研究一个需要3个ActiveX控件的C#/ VS2008项目。我使用AxImp.exe
为控件创建了一个.NET包装器,并将它们添加为我的项目的引用。几天后代码一直没有任何问题。
昨天,我从我们的版本控制服务器中提取了一个干净的版本(包含了包装DLL,但没有包含ActiveX控件本身),当我尝试运行该程序时,我得到COMResultException
HRESULT = REGDB_E_CLASSNOTREG(0x80040154)
1}}在父表单的InitializeCompnent
调用期间。
有关可能发生的事情的任何线索?
答案 0 :(得分:2)
不确定“干净版本”是什么意思,但是interop库中的GUID显然不再与ActiveX控件使用的GUID相匹配。结果是获得0x80040154,它无法再找到ActiveX注册表项。
控制构建过程并使ActiveX控件与interop包装器保持同步非常重要,否则您将长期与此问题作斗争。生成它们应该与构建控件相关联。如果控件是在VB6中创建的,这可能尤其成问题。除非您设置其二进制兼容性功能,否则可以快速分配新的GUID。