首页 文章

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

提问于
浏览
2

请帮助在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 回答

  • 2

    看来您的C#代码在64位模式下运行,它无法加载32位非托管代码 .

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

    另外,使用32位版本的regsvr32注册库(请参阅Error Message When You Run Regsvr32.exe on 64-Bit Windows):

    %windir%\SysWoW64\regsvr32.exe C:\path\to\library.dll
    

相关问题