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

标签: dll C#
发布时间: 2013/12/2 21:58:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

请帮助在 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 给出错误

未处理的异常类型的 System.Runtime.InteropServices.COMException 在 ATLLibTest.exe 发生。

检索组件的 CLSID {...} 由于以下错误 80040154,失败的 COM 类工厂。

在线

IATLLibMain atllib = new ATLLibMainClass();

请显示任何项目示例在 C# 应用程序中使用 ATL DLL 或帮助修复此错误吗?谢谢你......

解决方法 1:

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

C# 应用程序的目标平台Any CPU更改为x 86

此外,注册使用regsvr32 32-位版本的库 (请参阅错误消息时您运行 Regsvr32.exe 在 64 位 Windows 上):

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