gpt4 book ai didi

c# - 在 C# 应用程序中导入和调用 COM dll

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:45 26 4
gpt4 key购买 nike

请帮助在 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 报错

An unhandled exception of type System.Runtime.InteropServices.COMException occurred in ATLLibTest.exe.

Retrieving the COM class factory for component with CLSID {...} failed due to the following error 80040154.

在线

IATLLibMain atllib = new ATLLibMainClass();

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

最佳答案

您的 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

关于c# - 在 C# 应用程序中导入和调用 COM dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com