簡體   English   中英

如何將C#函數指針傳遞給CLI / C ++代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM