从.NET调用COM组件

时间:2014-09-12 07:50:11

标签: c# .net exception com com-interop

我有一个在我的系统上注册的COM组件,并在我的C#程序中添加了一个引用。当我想使用COM组件时,我在这行代码上收到异常:

ComServerUsedByDotNet.Class1 foo = new ComServerUsedByDotNet.Class1() ;

这是我收到的错误:

  

System.Runtime.InteropServices.COMException未处理Message =使用CLSID检索组件的COM类工厂   {61D54BA2-B9A2-4708-91E5-74C83A025063}因以下原因失败   错误:80040154。Source = EarlyBoundDotNetClientCS
  错误码= -2147221164

因此,我收到的错误代码是-2147221164,根据http://blogs.msdn.com/b/eldar/archive/2007/04/03/a-lot-of-hresult-codes.aspx,-2147221164代表REGDB_E_CLASSNOTREG。这是否意味着我的组件未注册?我很确定我在Windows上使用Run实用程序注册了它。如果问题是我没有注册COM组件,我该如何检查我的系统上注册了哪些COM组件?

2 个答案:

答案 0 :(得分:1)

我注册了COM组件。我发现我需要的是为32位平台构建程序(Project - > Properties - > Build - > Platform Target:x64)。 COM组件可能是为32位平台构建的,使用它的.NET应用程序也应该为32位平台构建。

答案 1 :(得分:0)

正如David Brabant所说,检查注册表中的CLSID以确认COM Server DLL已正确注册。

如果没有,则在.NET可以访问之前,您需要使用regsvr32.exe向Windows注册COM服务器。

有关regsvr32的更多信息:How to use the Regsvr32 tool and troubleshoot Regsvr32 error messages