可以这样做吗?
可以使用以下代码完成对C风格函数指针的编组:
GCHandle rahHandlle = GCHandle::Alloc(reAuthHandler);
IntPtr rahPtr = Marshal::GetFunctionPointerForDelegate(reAuthHandler);
auto rahUnman = static_cast<SomeFuncPtr>(rahPtr.ToPointer());
但是如何编组std :: function呢?如果可以的话。
答案 0 :(得分:1)
在C ++ / CLI .NET代码中声明一个与本机std :: function中的参数匹配的函数指针 - 并将.NET委托的指针强制转换为此函数。
//C++ CLI
IntPtr rahPtr = Marshal::GetFunctionPointerForDelegate(reAuthHandler);
//Declare a function pointer which matches the parameters of your native C++ std::function
typedef void(__stdcall * ThisIsMyCppFunctionDeclaration)(long);
//Then cast your delegate pointer to the c++ function pointer (which
auto callbackFunctionCpp = static_cast<ThisIsMyCppFunctionDeclaration>(rahPtr.ToPointer());
//And then finally invoke your native C++ method which takes a std::function
DoWork(callbackFunctionCpp);
-
//C++ Native
void DoWork(std::function<void(long theLongValue)> callback){
//Do something
callback(123);
}