请帮助在C#应用程序中使用ATL COM DLL方法
在ATLLib.idl中
...
interface IATLLibMain : IUnknown{
[helpstring("method hello")] HRESULT hello([out,retval] BSTR* res);
};
...
在ATLLibMain.cpp(ATL SimpleObject
Class)
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的任何项目示例或帮助修复此错误?谢谢...
1 回答
看来您的C#代码在64位模式下运行,它无法加载32位非托管代码 .
将C#应用程序的平台目标从任意CPU更改为x86 .
另外,使用32位版本的regsvr32注册库(请参阅Error Message When You Run Regsvr32.exe on 64-Bit Windows):