我在C++/CLI项目中使用的本机C++库引发了给我结果的事件,
反正是以我尝试的方式完成它,或者我应该声明非托管结果对象在非托管事件中填充它们然后马歇尔呢?
编辑:
class MyNativeListener: public NativeEventListener
{
private:
ManagedResultsObject ^_results;
public:
void onEndProcessing(ProcessingEvent *event)
{
_results.Value = event->value;
//Many more properties to capture
}
};
Run Code Online (Sandbox Code Playgroud)
这就是我正在尝试的,我已经扩展了本机事件侦听器来捕获事件,但不确定如何将结果捕获到托管对象.
Edit2 在@mcdave auto_gcroot建议的同一行搜索时找到了这个
mcd*_*ave 18
您的本机类需要存储托管对象的句柄而不是对它的引用.您可以使用gcroot模板执行此操作.如果你深入了解gcroot模板,你会发现它使用GCHandle结构,它可以将适当的静态转换存储为void*指针,因此提供了一种在本机代码中存储托管引用的方法.
尝试按以下方式扩展代码:
#include <vcclr.h>
class MyNativeListener: public NativeEventListener
{
private:
gcroot<ManagedResultsObject^> _results;
public:
void onEndProcessing(ProcessingEvent *event)
{
_results->Value = event->value;
//Many more properties to capture
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6413 次 |
| 最近记录: |