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

时间:2013-03-03 11:12:20

标签: c# dll com atl

请帮助在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的任何项目示例或帮助修复此错误? 感谢...

1 个答案:

答案 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