【发布时间】:2013-02-17 13:36:13
【问题描述】:
请帮助在 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 报错
在 ATLLibTest.exe 中发生了
System.Runtime.InteropServices.COMException类型的未处理异常。检索具有 CLSID {...} 的组件的 COM 类工厂失败,原因是以下错误 80040154。
上线
IATLLibMain atllib = new ATLLibMainClass();
请显示在 C# 应用程序中使用 ATL DLL 的任何项目示例或帮助修复此错误? 谢谢...
【问题讨论】:
-
您会得到比这更好的异常信息。 Message 和 ErrorCode 属性对于诊断异常至关重要。只需将消息字符串粘贴到搜索框中,您很有可能找到答案。
-
除非您还向我们展示了异常的确切错误消息(每个异常都有 Message 属性)以及堆栈跟踪,否则无法判断。也许您在某些更改后忘记重新注册您的 COM dll?
-
Retrieving the COM class factory for component with CLSID {...} failed due to the following error 80040154.在线IATLLibMain atllib = new ATLLibMainClass(); -
0x80040154错误 (REGDB_E_CLASSNOTREG) 告诉您的 ATL DLL 在类型库上有问题的类,但实现在某种程度上不正确:没有您引用的接口,而是整个 coclass 托管。您还没有显示问题的代码,这是错误的。