我想要非託管C++代碼來調用C#函數作爲回調。我有一個CLI/C++類封裝非託管代碼。這個CLI/C++類的一個實例存在於C#中。如何將C#函數指針傳遞到CLI/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){
....
}
然後在命令行代碼,我想要做這樣的事情:
void addValueChangedCallback(void (*ManipCallBack)(float)){
unmanagedCPPCLASS.addValueChangedCallback(ManipCallBack)
}
我怎樣才能把函數指針到C++指針(*)?另外,我不能在C++/CLI項目中引用C#項目,因爲C#類已經引用並使用C++/CLI項目。會不會有依賴性問題?
我曾在某些網站上看到有關'編組數據'或使用'互操作'的參考資料。我不明白他們是如何工作的,或者他們從我見過的任何事情上做了什麼,這些是我應該使用的嗎?
我想嘗試創建一個正確的簽名,隨後調用C#函數的包裝C++函數。在使用C++/CLI時,你不應該需要編組或者互操作,整個過程就是讓編譯器使用語言擴展來處理它。 – millimoose
在C++/CLI代碼中聲明委託類型,這樣就不會對C#程序集有依賴性。公開。使用Marshal.GetFunctionPointerForDelegate()來獲取可傳遞給本機代碼的指針。不要忘記存儲傳遞的委託對象以保持它的引用。 –
[C++/cli傳遞(託管)委託給非託管代碼的可能的重複](http://stackoverflow.com/questions/2972452/c-cli-pass-managed-delegate-to-unmanaged-code) –