ATL 进程外回调接口上的'Interface not Registered'错误
'Interface not Registered' error on ATL out-of-process callback interface
我有一个ATL进程内服务器,它实现了这样的回调接口:
.idl
interface IClientEvents : IUnknown{
[] HRESULT TestEvent(void);
};
interface IATLSimpleObject : IDispatch{
[id(1)] HRESULT Advise([in] IClientEvents* clientEvents);
[id(2)] HRESULT Unadvise(void);
};
.h
private:
IClientEvents* m_ClientEvents;
public:
STDMETHOD(Advise)(IClientEvents* clientEvents);
STDMETHOD(Unadvise)(void);
.cpp
STDMETHODIMP CATLSimpleObject::Advise(IClientEvents* clientEvents)
{
m_ClientEvents = clientEvents;
m_ClientEvents->AddRef();
return S_OK;
}
STDMETHODIMP CATLSimpleObject::Unadvise(void)
{
m_ClientEvents->Release();
m_ClientEvents = NULL;
return S_OK;
}
C#客户端
public partial class Form1 : Form, ATLProject1Lib.IClientEvents
{
private ATLProject1Lib.ATLSimpleObject ATLSimple = new ATLProject1Lib.ATLSimpleObject();
private void Form1_Shown(object sender, EventArgs e)
{
ATLSimple.Advise(this);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
ATLSimple.Unadvise();
}
它工作得很好,但我需要在进程外的服务器中做同样的事情,然而,在执行时,我在调用"ATLSimple.Advice(this)"时收到"Interface not Registered"(80040105)错误。
我花了几个小时寻找类似的问题,但什么也找不到。如有任何帮助,我们将不胜感激。
为了在进程外实现这一点,您需要在进程之间整理接口。您很可能希望依赖Automation编组,它使用从IDL生成的typelib来查找编组内容和方式。问题是,这只适用于IDL中标记为[oleautomation]
、[dual]
或两者都标记的接口。有关详细信息,请参阅此答案。
最好将要编组的接口标记为[oleautomation]
,并添加一条注释,如"如果删除它,编组魔法就会消失"。
相关文章:
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- Directx 11 - CompileFromFile() is not compiling
- 方法错误"not all control paths return a value"和方法不返回值
- Centos7 g++ "to_string is not in a member of std"
- 将系数存储在头文件的数组中("does not name a type"错误)
- QGraphicsItems not showing up QGraphicsScene
- ATL 进程外回调接口上的'Interface not Registered'错误