请帮助在C#应用程序中使用ATL COM DLL方法
ATLLib.idl中的
...
interface IATLLibMain : IUnknown{
[helpstring("method hello")] HRESULT hello([out,retval] BSTR* res);
};
...
ATLLibMain.cpp中的(ATL SimpleObject
类)
STDMETHODIMP CATLLibMain::hello(BSTR* res)
{
*res = SysAllocString(L"Hello world!!!");
return S_OK;
}
我编译并注册了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的任何项目示例或帮助修复此错误? 感谢...
答案 0 :(得分:2)
您的C#代码似乎在64位模式下运行,它无法加载32位非托管代码。
将任何CPU 中的平台目标更改为 x86 。
另外,使用 32位版本的regsvr32 注册库(参见Error Message When You Run Regsvr32.exe on 64-Bit Windows):
%windir%\SysWoW64\regsvr32.exe C:\path\to\library.dll