C++ Cx 将委托传递给本机 C++
C++ Cx passing delegates to native c++
我需要找到一种方法来将回调从 C++/Cx 检索回本机 C++。在 C++ 代码中,它们存储为函数指针,而在 C++/Cx 中,它们存储在委托中。我发现在 C# 和 C++/CLI 中有一个类似于 GetFunctionPointerForDelegate()
的函数,但在 C++/CX 中似乎没有类似的函数。这个问题真的有解决办法吗?
我对 C++/CX 一无所知,但快速搜索后发现了这个问题,对我来说这听起来像是您要完成的任务:
codeproject.com: Convert a Delegate to a Function pointer to Implement Callback function
C++/Cx 是 C# 应用程序和 C++ 本机库之间的中间层。我设法将指针从 C# 传递到 WinRt(C++/Cx) 层,如下所示:
del d = new del(callBackFunction); //declare a delegate and
//add a function to delegate
IntPtr p = GetFunctionPointerForDelegate(d); //retrieve pointer
w.retrieveCallbackFunction(p.toInt32()); //pass a pointer as int to WinRt layer
在 WinRt 层内部 retrieveCallbackFunction:
void* x=(void*)p; //cast it to void*
callbackFunctionType ptr = (callbackFunctionType)x; // cast it to a type
// of function pointer
ptr(...); //call function
我知道这不是最好的解决方案,但这个现在对我有用。
编辑
防止垃圾收集器收集函数或委托也是一个好主意
GCHandle callbackHandle = GCHandle.Alloc(d); // !!!!
但现在由我们稍后释放此内存。
我需要找到一种方法来将回调从 C++/Cx 检索回本机 C++。在 C++ 代码中,它们存储为函数指针,而在 C++/Cx 中,它们存储在委托中。我发现在 C# 和 C++/CLI 中有一个类似于 GetFunctionPointerForDelegate()
的函数,但在 C++/CX 中似乎没有类似的函数。这个问题真的有解决办法吗?
我对 C++/CX 一无所知,但快速搜索后发现了这个问题,对我来说这听起来像是您要完成的任务:
codeproject.com: Convert a Delegate to a Function pointer to Implement Callback function
C++/Cx 是 C# 应用程序和 C++ 本机库之间的中间层。我设法将指针从 C# 传递到 WinRt(C++/Cx) 层,如下所示:
del d = new del(callBackFunction); //declare a delegate and
//add a function to delegate
IntPtr p = GetFunctionPointerForDelegate(d); //retrieve pointer
w.retrieveCallbackFunction(p.toInt32()); //pass a pointer as int to WinRt layer
在 WinRt 层内部 retrieveCallbackFunction:
void* x=(void*)p; //cast it to void*
callbackFunctionType ptr = (callbackFunctionType)x; // cast it to a type
// of function pointer
ptr(...); //call function
我知道这不是最好的解决方案,但这个现在对我有用。
编辑
防止垃圾收集器收集函数或委托也是一个好主意
GCHandle callbackHandle = GCHandle.Alloc(d); // !!!!
但现在由我们稍后释放此内存。