我在C#以下設置:如何從C#傳遞一個委託或函數指針,C++和使用InternalCall
public delegate void CallbackDelegate(string message);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern void setCallback(CallbackDelegate aCallback);
public void testCallbacks()
{
System.Console.Write("Registering C# callback...\n");
setCallback(callback01);
}
public void callback01(string message)
{
System.Console.Write("callback 01 called: " + message + "\n");
}
而這在C++(該功能通過mono_add_internal_call正確註冊):
typedef void (*CallbackFunction)(const char*);
void setCallback(MonoDelegate* delegate)
{
// How to convert the MonoDelegate to a proper function pointer?
// So that I can call it like func("test");
}
的C++ - 函數被調用,東西傳遞給委託變量。 但現在呢?
我環顧四周,發現幾次提到的函數「mono_delegate_to_ftnptr」,從這些例子中,它似乎正是我所需要的。
但是,這個函數似乎並不存在於我的單聲道(4.6)發行版中,所以我只能猜測它不再存在。
我還發現了一些如何用PInvoke做到這一點的例子。這是我不想使用的 - 因爲InternalCall對於我的目的要快得多。
當然,如果PInvoke是唯一的方法,那就這樣吧,但我懷疑這一點。
最後,我對如何從這裏出發感到茫然。
downvote的具體原因是什麼?我應該添加什麼? – TheSHEEEP
在InternalCall,C++/CLI的Microsoft工具鏈實現中,您將使用簽名'setCallback(System :: Action^delegate)'直接接受直接接收.NET的.NET代理串。也許如果你在Mono中展示瞭如何通過InternalCall函數傳遞.NET引用類型,它可能會導致更輕量級的解決方案。 –