2

请帮助在 C# 应用程序中使用 ATL COM DLL 方法

在 ATLLib.idl

...
interface IATLLibMain : IUnknown{
    [helpstring("method hello")] HRESULT hello([out,retval] BSTR* res);
};
...

在 ATLLibMain.cpp(ATLSimpleObject类)中

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.COMExceptionATLLibTest.exe中出现未处理的类型异常。

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

在线的

IATLLibMain atllib = new ATLLibMainClass();

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

4

1 回答 1

2

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

将 C# 应用程序的Platform TargetAny CPU更改为x86

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

%windir%\SysWoW64\regsvr32.exe C:\path\to\library.dll
于 2013-03-03T11:50:55.163 回答