首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用COM组件时出错

使用COM组件时出错
EN

Stack Overflow用户
提问于 2011-10-20 07:31:48
回答 3查看 185关注 0票数 3

场景-我正在编写一个控制台应用程序。需要使用一个名为Interop.ABCServer.DLL的DLL --我是COM的新手,所以真的不知道它在哪里出现,但是我已经通过ILDASM检查了这个DLL,它打开并显示元数据。所以,我想这是一个.NET DLL,而不是COM

现在,当我尝试通过从它启动某些类来使用它时,它给了我一个异常--用CLSID<1111-1111.>检索组件的COM类工厂,由于以下错误失败:80040154。

假设COM组件是一种古老的技术,需要首先注册组件,我们需要以某种方式注册它。如何注册此组件(记住它是.NET dll而不是COM )?

以上登记是否解决了问题?如果没有,那么如何解决它。

现在,我已经使用regsvr32.dll注册了ABCServer.dll。但,

我有这样的代码,

代码语言:javascript
复制
try
{
    Ilookup LP = New LoopUpClass();
    IServer Svr = LP.LookUpServer(hostname, port);
}
catch(Exception ex)
{

}

先前给出错误的第1行现在刚刚终止应用程序。我甚至在调试时在第1行和第2行添加了断点。但是控件永远不会到达第2行,当我在第1行时按下F10,应用程序就会终止。

基本上,一旦我注册了COM,我如何使用它。我需要在ADD REFERENCE对话框中的COM选项卡注册它吗?还是我需要重新创建一个INTEROP.ABCServer.DLL ?或者我可以使用我提供的原始INTEROP.ABCServer.DLL。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-20 07:39:07

您的Interop.ABCServer.DLL似乎只是运行时可调用包装器。它只包含将调用编组到真正的COM库的代码。

因此,您需要第二个dll,这是您的具体COM组件,您必须注册到regsvr32.exe。它的可能性叫做ABCServer.DLL

在你所附的问题中:

如果提供的Interop是最新的,您可以使用它。如果没有,您可以使用TLBIMP.EXE创建自己的库。当直接向COM添加引用时,CS将动态为您生成RCW库。这是绝对可以的,如果您想要使用的多个COM库之间没有依赖关系。

票数 2
EN

Stack Overflow用户

发布于 2011-10-20 07:39:10

80040154通常是一个错误,因为COM组件还没有注册。通常使用regsvr32 yourdll.dll注册COM dll,这将将GUID添加到注册表中,以便每当使用COM对象的GUID时,系统将知道从何处加载DLL。

.NET为COM创建了一个包装器,这就是您看到的这个Interop.*.*,但是您需要注册包装器所用于的DLL。也许你在某个地方有一个ABCServer.DLL。

票数 2
EN

Stack Overflow用户

发布于 2011-10-20 07:39:20

Interop.ABCServer.dll可能引用了包含COM代码的其他dll。签入程序集清单,它们是哪一个。若要注册COM组件,请使用regsvr32。

如果要检查组件是否已注册,请在HKEY_CLASSES_ROOT下的注册表中确认组件已被很好地列出。根据CLSID,您可以在HKEY_CLASSES_ROOT\CLSID下面查找dll的路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7832522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档