第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在C#寫的dll 里調(diào)用回調(diào)函數(shù)?

如何在C#寫的dll 里調(diào)用回調(diào)函數(shù)?

C#
12345678_0001 2019-05-31 07:02:12
dll 是用C# 寫的。用一個其他的客戶端去調(diào)用(C++,Delphi等)。例如,一個c++寫的程序,引用c#寫的dll, 并調(diào)用dll中的一個函數(shù),該c#函數(shù)執(zhí)行完后,調(diào)用c++程序的一個回調(diào)函數(shù),以便通知c++, 事情做完了,并傳回一些數(shù)據(jù)。在百度搜索的全都是反過來的例子。懇請賜教,并提供最簡單的例子。謝謝
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

反過來比較容易,因為C#的P/Invoke就是做這個的。但是顯然C++沒有關(guān)于C#代碼回調(diào)的的實現(xiàn),因為C++的架構(gòu)從來也沒考慮過還會調(diào)用C#(這種情況實在是太少見了,況且也不必要)。如果非要實現(xiàn)可以采用多進程,使用進程間通信。我想到的:
1.模仿linux中的管道(PIPE),產(chǎn)生虛擬文件,而C++阻塞直到文件產(chǎn)生或本身超時。這樣可以實現(xiàn)數(shù)據(jù)交換,既能實現(xiàn)傳數(shù)據(jù)又可以使C++程序及時得到通知。缺點就是IO密集,降低效率。
2.使用TCP通信,監(jiān)聽端口獲取消息,這是跨平臺程序通信最常用也是最正統(tǒng)的方法。一般是跨操作系統(tǒng)編程常用的,比如windows和linux ubuntu server程序進行交互。你所述情況雖然不算跨操作系統(tǒng)通信,但是也是跨平臺了。而且想想就知道C++作為先出現(xiàn)的語言而且是編譯型語言,調(diào)用C#托管區(qū)的函數(shù)還要設(shè)回調(diào),其難度可想而知。
3.如果你的C++是基于winform的,可以在C#中P/Invoke調(diào)用winAPI的SendMessage發(fā)送窗體消息從而間接實現(xiàn)回調(diào)。
4.自然還有一些更底層的Dirty方法,比如嵌匯編更改上下文程序指針地址。。。不過不適合正統(tǒng)的程序,因為太Dirty啊。。。而且出錯概率大。
除此之外,如果不采用多線程通信,C#的反射(reflection)特性可以參考,但是控制權(quán)依然在C#。況且C#無從知道C++的內(nèi)部結(jié)構(gòu),自然難以直接調(diào)用。你想想吧,是不是這個道理~



查看完整回答
反對 回復(fù) 2019-06-01
  • 2 回答
  • 0 關(guān)注
  • 425 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號