在C#应用程序中导入和调用COM dll

在C#应用程序中导入和调用COM dll,c#,dll,com,atl,C#,Dll,Com,Atl,请帮助在C#应用程序中使用ATL COM DLL方法 在ATLLib.idl中 ... interface IATLLibMain : IUnknown{ [helpstring("method hello")] HRESULT hello([out,retval] BSTR* res); }; ... 在atlibmain.cpp中(ATLSimpleObjectClass) 我已经编译并注册了COM。 在C#项目中,添加了对ATLLib.dll的引用,并尝试这样

请帮助在C#应用程序中使用ATL COM DLL方法

在ATLLib.idl中

...
interface IATLLibMain : IUnknown{
    [helpstring("method hello")] HRESULT hello([out,retval] BSTR* res);
};
...
在atlibmain.cpp中(ATL
SimpleObject
Class)

我已经编译并注册了COM。 在C#项目中,添加了对ATLLib.dll的引用,并尝试这样调用方法

IATLLibMain atllib = new ATLLibMainClass();
Console.WriteLine(atllib.hello());
VS给出了错误

ATLLibTest.exe中发生类型为
System.Runtime.InteropServices.COMException
的未处理异常

由于以下错误80040154,检索CLSID为{…}的组件的COM类工厂失败

在线

IATLLibMain atllib = new ATLLibMainClass();
请显示在C#应用程序中使用ATL DLL的任何项目示例,或帮助修复此错误? 谢谢…

您的C代码似乎是在64位模式下运行的,它无法加载32位非托管代码

将C#应用程序的平台目标从任何CPU更改为x86

此外,请使用32位版本的regsvr32注册库(请参阅):


您可以获得有关异常的更好信息。消息和错误代码属性对于诊断异常非常重要。只需将消息字符串粘贴到搜索框中,您就很可能找到答案。除非您还向我们显示异常的确切错误消息(每个异常都有消息属性)以及堆栈跟踪,否则无法确定答案。可能您在某些更改后忘记重新注册COM dll?
检索CLSID为{…}的组件的COM类工厂失败,原因是出现以下错误80040154。
在线
iatlibmain atllib=new ATLLibMainClass()
0x80040154错误(
REGDB_E_CLASSNOTREG
)告诉您的ATL DLL在类型库中有问题的类,但实现有点不正确:没有您引用的接口,而是整个coclass宿主。您尚未显示问题的代码,这是错误的。但我的C#project的平台目标已设置为x86@ErikKianu,请查看更新(关于图书馆注册)。谢谢@Sergey,但结果仍然相同。。。СПзззззззСзззз,зззззззззззззззз。
IATLLibMain atllib = new ATLLibMainClass();
%windir%\SysWoW64\regsvr32.exe C:\path\to\library.dll