com dll c 在对象查看器中不可见



我已经使用Visual Studio 2013创建了一个具有COM接口的C DLL。DLL GET安装并注册。在OLE对象查看器中,我可以看到此dll的TypeLibrary导出功能。regsvr32完成没有任何错误。

仅在C#i内无法使用,因为创建失败而错误0x80040154-未找到或未注册的类。

这不是平台问题。64位版本在System32和32bit中Syswow64中的版本,它们在那里注册并打字信息在OLE对象查看器中确认了此。

,但该类未在OLE对象查看器树中列出。

habe noe的想法是什么是缺少或错。

更多,我有一个Simliar VC 项目,可以看到此com/dll在OLE对象查看器中的视图中。它已编译,链接并以完全相同的方式安装。

我已经比较了所有编译器,链接器和MIDL设置,检查了.IDL项目中的文件,.rgs文件...似乎都相同,除了不同的名称和指导。

所以这真的很奇怪:一个在树上显示为com对象OLE对象查看器的使用,可以在C#程序中使用,另一个可以使用。

请注意:使用此DLL/COM,C#项目中没有编译器错误。创建时有一个运行时错误0x80040154。

摘要:我必须com/dll,两个视觉研究项目,都部署了方式,可以在OLE对象树中看到一个,并且可以在C#中使用,另一个可以在C#中使用。

是否可以检查任何要点,并且成功l所需的要点列出为ole com对象?

ps:唯一的区别是类型库中指示的MSIL编译器版本:良好的com/dll具有msil 7.xxx不良一个8.xxx但是我根本不知道选定的MSIL编译器在哪里。两个dll/com都建立了由VS2013

ole/com对象查看器显示注册。当应用程序尝试创建实例时,涉及进一步的步骤:服务器实现的注册点,已加载库,class Factory已找到,班级工厂被称为创建实例。这些步骤中的失败导致实例化故障,但注册本身是有效的。

解决问题的典型步骤是:

  1. 在com类的构造函数中设置一个断点,在类工厂构建中,在DllGetClassObject导出的dll函数中,最终在其DllMain中 - 找出系统到达实例的距离。然后从那里走到问题的根源。
  2. 使用Process Monitor在Instantiation呼叫周围跟踪注册表/文件活动并确定那里的问题(尤其是您使用COM Server实现的DLL,甚至没有加载)。

如果甚至在OLE/COM对象查看器中都没有列出该类,则即使在注册阶段也存在问题。您的第一次故障排除尝试是手动重新注册,看看您是否有任何注册错误,或者是否解决了问题。注册失败的原因有很多,一个典型的是您在类型库中拥有COM类,但是OBJECT_ENTRY没有连接和引用实施。由于系统无法拾取您的实现,并且您会看到您看到的内容:REGDB_E_CLASSNOTREG错误代码。

找到了问题:TypeLibrary与对象无关,因为.RGS文件中的TypeLibrary clsid与.idl文件中的typelibrary CLSID不同,只是通过一个最喜欢的空间,不小心引入了。。

in .RGS文件:

TypeLib = s '{7DAA7049 -AAB2-4689-8635-FB6E03423F34}'

.idl

uuid(7DAA7049-AAB2-4689-8635-FB6E03423F34),

现在,我可以将DLL用作C#项目中的com。com/dll未在对象树中列出,因为在.rgs中未定义名称。这是一个具有名称的定义,这是对象查看器中com/dll的名称;该名称以前是空的(s'')。

ForceRemove {4763F309-D922-227A-A1A8-CDFF29893BBD} = s 'myDllCom Class'

最新更新