反過來比較容易,因為C#的P/Invoke就是做這個的。但是顯然C++沒有關於C#程式碼回撥的的實現,因為C++的架構從來也沒考慮過還會呼叫C#(這種情況實在是太少見了,況且也不必要)。如果非要實現可以採用多程序,使用程序間通訊。我想到的:
1.模仿linux中的管道(PIPE),產生虛擬檔案,而C++阻塞直到檔案產生或本身超時。這樣可以實現資料交換,既能實現傳資料又可以使C++程式及時得到通知。缺點就是IO密集,降低效率。
2.使用TCP通訊,監聽埠獲取訊息,這是跨平臺程式通訊最常用也是最正統的方法。一般是跨作業系統程式設計常用的,比如windows和linux ubuntu server程式進行互動。你所述情況雖然不算跨作業系統通訊,但是也是跨平臺了。而且想想就知道C++作為先出現的語言而且是編譯型語言,呼叫C#託管區的函式還要設回撥,其難度可想而知。
3.如果你的C++是基於winform的,可以在C#中P/Invoke呼叫winAPI的SendMessage傳送窗體訊息從而間接實現回撥。
4.自然還有一些更底層的Dirty方法,比如嵌彙編更改上下文程式指標地址。。。不過不適合正統的程式,因為太Dirty啊。。。而且出錯機率大。除此之外,如果不採用多執行緒通訊,C#的反射(reflection)特性可以參考,但是控制權依然在C#。況且C#無從知道C++的內部結構,自然難以直接呼叫。你想想吧,是不是這個道理~
反過來比較容易,因為C#的P/Invoke就是做這個的。但是顯然C++沒有關於C#程式碼回撥的的實現,因為C++的架構從來也沒考慮過還會呼叫C#(這種情況實在是太少見了,況且也不必要)。如果非要實現可以採用多程序,使用程序間通訊。我想到的:
1.模仿linux中的管道(PIPE),產生虛擬檔案,而C++阻塞直到檔案產生或本身超時。這樣可以實現資料交換,既能實現傳資料又可以使C++程式及時得到通知。缺點就是IO密集,降低效率。
2.使用TCP通訊,監聽埠獲取訊息,這是跨平臺程式通訊最常用也是最正統的方法。一般是跨作業系統程式設計常用的,比如windows和linux ubuntu server程式進行互動。你所述情況雖然不算跨作業系統通訊,但是也是跨平臺了。而且想想就知道C++作為先出現的語言而且是編譯型語言,呼叫C#託管區的函式還要設回撥,其難度可想而知。
3.如果你的C++是基於winform的,可以在C#中P/Invoke呼叫winAPI的SendMessage傳送窗體訊息從而間接實現回撥。
4.自然還有一些更底層的Dirty方法,比如嵌彙編更改上下文程式指標地址。。。不過不適合正統的程式,因為太Dirty啊。。。而且出錯機率大。除此之外,如果不採用多執行緒通訊,C#的反射(reflection)特性可以參考,但是控制權依然在C#。況且C#無從知道C++的內部結構,自然難以直接呼叫。你想想吧,是不是這個道理~