看板 C_and_CPP 關於我們 聯絡資訊
大家好 請問一個問題 關於C++ 寫的程式 可否呼叫C# dll裡面的function. 我之前有稍微用過C# 程式 呼叫C++ 寫的dll 流程大概是要把C++包成一個COM dll C#程式再用奇怪語法去呼叫 好像叫做Interop 但反過來 我不知道有沒有可行的機會 也不知道專有名詞叫什麼 可否請有經驗的版友給點建議 讓我有個survey的方向 我是希望不可行啦 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.15.66
lwecloud:這個? http://ppt.cc/w0(B 我沒試過就是.. 11/22 16:37
QQ29:請問一下 因為跟^ 奇怪的C++不熟 是這種微軟創的C++才可以嗎 11/22 16:48
QQ29:才可以 用C++ 呼叫 C# 11/22 16:49
diabloevagto:應該都可以互call吧 11/22 17:25
angleevil:linux絕對無法call c# 11/22 17:26
QQ29:driver layer有可能可以呼叫C# dll嗎? 11/22 18:01
Bencrie:Linux不是有 Mono 可以跑 C# 嗎 ? 11/22 19:43
QQ29:喔我是 MS平台的 只是有人問說 driver不能呼叫C# dll嗎? 11/22 20:52
QQ29:雖然我覺得鐵定不能 但我也沒證據反駁他 才來此請教各位@@ 11/22 20:53
su31o4gj83:如果是 C++ 直接呼叫 C# dll, 我猜是不行 11/22 21:48
su31o4gj83:但如果你用 MS 的 C++/CLI, 是可以呼叫 C# 的東西 11/22 21:49
su31o4gj83:所以 driver (C++) <--> C++/CLI <--> C# 是可以行的 11/22 21:52
su31o4gj83:但這種方法很醜很難用, 要看看有沒有更有效率的方法 11/22 21:53
priv:明明我貼那篇標題就是call manange dll from native 11/22 21:53
priv:不要你猜不行好嗎... 11/22 21:54
priv:driver is another story 11/22 21:54
priv:從driver層就算要call一般的native user dll也是不行啊 11/22 21:54
priv:必須要從user mode註冊kernel event 11/22 21:56
priv:dll收到event之後再做事這種間接的方法 11/22 21:56
elfkiller:非driver可行 而且比C#呼叫C++容易許多 driver不知 11/22 21:58
priv:再者C++ call C++/CLI根本和C++ call C#沒什麼差別 11/22 21:59
priv:一樣都是native call managed,建議su31o4gj83重整一下觀念 11/22 22:00
diabloevagto:推priv神! 11/22 22:05
su31o4gj83:C++ <--> C++/CLI 有讓人誤解了 11/22 22:08
su31o4gj83:應該是 C++/CLI <--> C# 就好 11/22 22:08
su31o4gj83:我這裡的 C++ 指的是不含 /clr, 標準的 C++ 11/22 22:11
su31o4gj83:標準的 C++ 應該是認不得 C++/CLI or C# 11/22 22:19
su31o4gj83:C++/CLI 不是 C++ 的延伸, 是另一種語言 11/22 22:24
su31o4gj83:所以並不會有什麼 C++ call C++/CLI 或是 C++ call C# 11/22 22:28
su31o4gj83:永遠都是 C++/CLI 呼叫 C# 11/22 22:29
su31o4gj83:C++ <--> C++/CLI 是個誤會 11/22 22:29
su31o4gj83:我並不是指 C++ 直接呼叫 C++/CLI 11/22 22:30
su31o4gj83:而是 C++/CLI 可以向 C++ 註冊一個 function pointer 11/22 22:30
su31o4gj83:已達到 C++ 呼叫 C++/CLI 的效果 11/22 22:32
su31o4gj83:以 11/22 22:32
QQ29:謝謝各位 目前我是driver想直接呼叫已經存在build好的C# dll~ 11/22 23:41
QQ29:我會試著消化這些文章 看看有沒有機會做到.... 11/22 23:41
su31o4gj83:基本上你一定會用到 C++/CLI 11/23 00:25
su31o4gj83:只是看是要把 C++/CLI 當作 C++ 與 C# 溝通的橋樑 11/23 00:26
su31o4gj83:還是直接把 C++ 專案整個轉成 C++/CLI 11/23 00:27
QQ29:可是我C++是寫driver耶 我是跟driver不熟 但C++/CLI 能寫 11/23 00:28
QQ29:driver嗎@@ 11/23 00:28
su31o4gj83:使用 C++/CLI 可能會遇到 MS run-time lib 衝突的問題 11/23 00:30
su31o4gj83:因為要使用 C++/CLI 必須加上 /clr 11/23 00:31
su31o4gj83:但 /clr 會限制使用 /MD 11/23 00:31
su31o4gj83:http://ppt.cc/Lp85 的備註有提到 11/23 00:33
su31o4gj83:另外轉移到 C++/CLI 可能會遇到奇奇怪怪的問題 11/23 00:35
su31o4gj83:參考 http://ppt.cc/FDkX 11/23 00:36
su31o4gj83:我也不知道能不能寫 driver, 我只能把我知道的分享一下 11/23 00:37
su31o4gj83:我去睡了, 晚安 11/23 00:37
ericinttu:to QQ29: 在你的認知裡, C 或 C++ 來寫driver, 有需要依 11/23 00:38
ericinttu: 賴到 C# 寫好的工具? 11/23 00:39
QQ29:基於某些因素~ C#的某API 我不知道她實作, 但又必須要使用 11/23 00:40
QQ29:在driver layer, 有人直接說應該可以 我無法證明不行 11/23 00:40
QQ29:畢竟我也不熟悉這些東西..... 11/23 00:40
QQ29:現在問題就是driver可否呼叫C#已經build好的dll...需要時間 11/23 00:41
QQ29:測試....沒有這方面的知識跟經驗orz 11/23 00:42
VictorTom:要不要說說看是哪個/些API? 11/23 01:00
dk3208:假如是kernel mode driver基本上應該無法直接呼叫manage的 11/23 01:10
dk3208:dll,不過如果是user mode driver說不定有機會 11/23 01:11
priv:不然原po就把實際情形講清楚 11/23 10:06
priv:並不是所有的driver都可以UMDF的 11/23 10:07
priv:基本上kernel mode不能用user mode api是註定的 11/23 10:08
priv:不管你是managed或native的api都一樣 11/23 10:08
priv:不能用的東西想破頭也沒用,就是要轉一個思考方向 11/23 10:09