在C#应用程序中导入和调用COM dll
请帮助在C#应用程序中使用ATL COM DLL方法 在ATLLib.idl中在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的引用,并尝试这样
...
interface IATLLibMain : IUnknown{
[helpstring("method hello")] HRESULT hello([out,retval] BSTR* res);
};
...
在atlibmain.cpp中(ATLSimpleObject
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