我有一个我在VB6项目中创建的dll,我现在在c#项目中使用它。这之前有用,但现在当我尝试返回到c#项目修复bug时,程序得到一个COMException,说明大致翻译:
由于以下错误,无法从IClassFactory创建具有CLSID {085E3494-9F78-47D5-B0E6-FA460FD3CBED}的COM组件实例:800a01ad。
所以我尝试创建一个新的空c#项目,在main函数中只有一行:
OurNamespace.OurClass foo = new OurNamespace.OurClass();
哪个失败并出现同样的错误。
我已经注册了dll,但这并没有改变问题的结果。
问题只发生在我目前所在的机器上,我仍然有兴趣了解这个问题,以便我知道如果它在客户的计算机上发生时如何修复它。
答案 0 :(得分:5)
这转换为VB6运行时错误429,“ActiveX无法创建对象”。不是你的C#代码失败,它是VB6代码有问题。你只能通过调试VB6代码到达某个地方。您将需要VB6 IDE,加载库项目,将C#程序设置为启动程序,并在您尝试使用C#代码创建的类的Class_Initialize子例程中设置断点。
假设你没有工具,错误429有很多潜在的原因。最常见的是注册问题,通过在VB6代码使用的DLL上运行Regsvr32.exe来解决。
答案 1 :(得分:1)
请尝试按照此kb文章中的步骤查看是否有助于http://support.microsoft.com/kb/194801
答案 2 :(得分:1)
使用二进制兼容性设置编译VB6 DLL。否则,每次编译时,VB6 DLL的GUID都会不断变化。