[英]How can I pass a C# function pointer into CLI/C++ code?
我希望非托管C ++代碼將C#函數作為回調來調用。 我有一個環繞非托管代碼的CLI / C ++類。 此CLI / C ++類的實例存在於C#中。
C#代碼看起來像下面的文本。 我有一個(委托)函數指針,指向callBack方法。 我有CLI_class的CLI實例。 我想在addValueChangedCallBack函數中以某種方式為它提供函數指針。
public Setup(){
tempFUNC myFuncObj = new tempFUNC(callBack)
CLI_class c=new CLI_class();
c.addValueChangedCallBack(myFuncObj)
}
public delegate void tempFUNC(float x);
void callBack(float x){
....
}
然后在CLI代碼中,我想執行以下操作:
void addValueChangedCallback(void (*ManipCallBack)(float)){
unmanagedCPPCLASS.addValueChangedCallback(ManipCallBack)
}
如何將函數指針轉換為C ++指針(*)? 另外,我無法在C ++ / CLI項目中引用C#項目,因為C#類已經引用並使用了C ++ / CLI項目。 會有依賴問題嗎?
我在某些站點上看到過“封送數據”或“互操作”的引用。 我不了解它們的工作原理或從我所看到的一切中可以確切地做什么,這些我應該使用嗎?
您可以使兩個項目相互引用,並使用System.InteropServices.Runtime.Marshal.GetFunctionPointerForDelegate來獲取函數指針。
但是,如果您是我,那么我將使C#類成為ComVisible並讓C ++代碼通過COM接口直接調用C#方法。 這樣就不需要C ++ / CLI包裝器。 如您所見,包裝總是很痛苦的。 C ++ / CLI有其用途,但不是創建包裝器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.