【发布时间】:2014-03-14 08:41:49
【问题描述】:
this 是问题的根源。我的答案已被删除,并提示开始一个新问题。所以,我们开始吧:
我想将this 的托管引用传递给非托管代码。然后从非托管回调中调用托管回调。
public ref class CReader
有一个私有字段
private:
[...]
void *m_pTag;
[...]
在托管类的构造函数中,我像这样初始化m_pTag:
m_pTag = new gcroot<CReader ^>(this);
稍后,我将这个void *m_pTag 传递给非托管代码。如果调用了非托管回调,我会将void *m_pTag 转换回托管引用并调用托管回调
(*(gcroot<CReader ^>*)pTag)->MANAGEDCALLBACKFUNCTION
如果 DLL 在另一个 AppDomain 下使用,则会引发异常。调试器在gcroot.h在线停止
// don't return T& here because & to gc pointer not yet implemented
// (T should be a pointer anyway).
T operator->() const {
// gcroot is typesafe, so use static_cast
return static_cast<T>(__VOIDPTR_TO_GCHANDLE(_handle).Target);
}
Cannot pass a GCHandle across AppDomains.
我的问题是,我该怎么办?
此致,
塞巴斯蒂安
==================== 编辑====================
我现在能够重现该问题。我已经截取了一些屏幕截图来显示问题。
问题是,回调中结构体gcroot的value-member是空的。
谢谢。
塞巴斯蒂安
==================== 编辑====================
推。
【问题讨论】:
标签: reference unmanaged managed command-line-interface