[問題] C++ 程式呼叫C# dll library?

看板C_and_CPP作者 (我愛阿蓉)時間12年前 (2011/11/22 16:28), 編輯推噓8(8058)
留言66則, 11人參與, 最新討論串1/2 (看更多)
大家好 請問一個問題 關於C++ 寫的程式 可否呼叫C# dll裡面的function. 我之前有稍微用過C# 程式 呼叫C++ 寫的dll 流程大概是要把C++包成一個COM dll C#程式再用奇怪語法去呼叫 好像叫做Interop 但反過來 我不知道有沒有可行的機會 也不知道專有名詞叫什麼 可否請有經驗的版友給點建議 讓我有個survey的方向 我是希望不可行啦 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.15.66

11/22 16:37, , 1F
這個? http://ppt.cc/w0(B 我沒試過就是..
11/22 16:37, 1F

11/22 16:48, , 2F
請問一下 因為跟^ 奇怪的C++不熟 是這種微軟創的C++才可以嗎
11/22 16:48, 2F

11/22 16:49, , 3F
才可以 用C++ 呼叫 C#
11/22 16:49, 3F

11/22 17:04, , 4F

11/22 17:25, , 5F
應該都可以互call吧
11/22 17:25, 5F

11/22 17:26, , 6F
linux絕對無法call c#
11/22 17:26, 6F

11/22 18:01, , 7F
driver layer有可能可以呼叫C# dll嗎?
11/22 18:01, 7F

11/22 19:43, , 8F
Linux不是有 Mono 可以跑 C# 嗎 ?
11/22 19:43, 8F

11/22 20:52, , 9F
喔我是 MS平台的 只是有人問說 driver不能呼叫C# dll嗎?
11/22 20:52, 9F

11/22 20:53, , 10F
雖然我覺得鐵定不能 但我也沒證據反駁他 才來此請教各位@@
11/22 20:53, 10F

11/22 21:48, , 11F
如果是 C++ 直接呼叫 C# dll, 我猜是不行
11/22 21:48, 11F

11/22 21:49, , 12F
但如果你用 MS 的 C++/CLI, 是可以呼叫 C# 的東西
11/22 21:49, 12F

11/22 21:52, , 13F
所以 driver (C++) <--> C++/CLI <--> C# 是可以行的
11/22 21:52, 13F

11/22 21:53, , 14F
但這種方法很醜很難用, 要看看有沒有更有效率的方法
11/22 21:53, 14F

11/22 21:53, , 15F
明明我貼那篇標題就是call manange dll from native
11/22 21:53, 15F

11/22 21:54, , 16F
不要你猜不行好嗎...
11/22 21:54, 16F

11/22 21:54, , 17F
driver is another story
11/22 21:54, 17F

11/22 21:54, , 18F
從driver層就算要call一般的native user dll也是不行啊
11/22 21:54, 18F

11/22 21:56, , 19F
必須要從user mode註冊kernel event
11/22 21:56, 19F

11/22 21:56, , 20F
dll收到event之後再做事這種間接的方法
11/22 21:56, 20F

11/22 21:58, , 21F
非driver可行 而且比C#呼叫C++容易許多 driver不知
11/22 21:58, 21F

11/22 21:59, , 22F
再者C++ call C++/CLI根本和C++ call C#沒什麼差別
11/22 21:59, 22F

11/22 22:00, , 23F
一樣都是native call managed,建議su31o4gj83重整一下觀念
11/22 22:00, 23F

11/22 22:05, , 24F
推priv神!
11/22 22:05, 24F

11/22 22:08, , 25F
C++ <--> C++/CLI 有讓人誤解了
11/22 22:08, 25F

11/22 22:08, , 26F
應該是 C++/CLI <--> C# 就好
11/22 22:08, 26F

11/22 22:11, , 27F
我這裡的 C++ 指的是不含 /clr, 標準的 C++
11/22 22:11, 27F

11/22 22:19, , 28F
標準的 C++ 應該是認不得 C++/CLI or C#
11/22 22:19, 28F

11/22 22:24, , 29F
C++/CLI 不是 C++ 的延伸, 是另一種語言
11/22 22:24, 29F

11/22 22:28, , 30F
所以並不會有什麼 C++ call C++/CLI 或是 C++ call C#
11/22 22:28, 30F

11/22 22:29, , 31F
永遠都是 C++/CLI 呼叫 C#
11/22 22:29, 31F

11/22 22:29, , 32F
C++ <--> C++/CLI 是個誤會
11/22 22:29, 32F

11/22 22:30, , 33F
我並不是指 C++ 直接呼叫 C++/CLI
11/22 22:30, 33F

11/22 22:30, , 34F
而是 C++/CLI 可以向 C++ 註冊一個 function pointer
11/22 22:30, 34F

11/22 22:32, , 35F
已達到 C++ 呼叫 C++/CLI 的效果
11/22 22:32, 35F

11/22 22:32, , 36F
11/22 22:32, 36F

11/22 23:41, , 37F
謝謝各位 目前我是driver想直接呼叫已經存在build好的C# dll~
11/22 23:41, 37F

11/22 23:41, , 38F
我會試著消化這些文章 看看有沒有機會做到....
11/22 23:41, 38F

11/23 00:25, , 39F
基本上你一定會用到 C++/CLI
11/23 00:25, 39F

11/23 00:26, , 40F
只是看是要把 C++/CLI 當作 C++ 與 C# 溝通的橋樑
11/23 00:26, 40F

11/23 00:27, , 41F
還是直接把 C++ 專案整個轉成 C++/CLI
11/23 00:27, 41F

11/23 00:28, , 42F
可是我C++是寫driver耶 我是跟driver不熟 但C++/CLI 能寫
11/23 00:28, 42F

11/23 00:28, , 43F
driver嗎@@
11/23 00:28, 43F

11/23 00:30, , 44F
使用 C++/CLI 可能會遇到 MS run-time lib 衝突的問題
11/23 00:30, 44F

11/23 00:31, , 45F
因為要使用 C++/CLI 必須加上 /clr
11/23 00:31, 45F

11/23 00:31, , 46F
但 /clr 會限制使用 /MD
11/23 00:31, 46F

11/23 00:33, , 47F
http://ppt.cc/Lp85 的備註有提到
11/23 00:33, 47F

11/23 00:35, , 48F
另外轉移到 C++/CLI 可能會遇到奇奇怪怪的問題
11/23 00:35, 48F

11/23 00:36, , 49F
11/23 00:36, 49F

11/23 00:37, , 50F
我也不知道能不能寫 driver, 我只能把我知道的分享一下
11/23 00:37, 50F

11/23 00:37, , 51F
我去睡了, 晚安
11/23 00:37, 51F

11/23 00:38, , 52F
to QQ29: 在你的認知裡, C 或 C++ 來寫driver, 有需要依
11/23 00:38, 52F

11/23 00:39, , 53F
賴到 C# 寫好的工具?
11/23 00:39, 53F

11/23 00:40, , 54F
基於某些因素~ C#的某API 我不知道她實作, 但又必須要使用
11/23 00:40, 54F

11/23 00:40, , 55F
在driver layer, 有人直接說應該可以 我無法證明不行
11/23 00:40, 55F

11/23 00:40, , 56F
畢竟我也不熟悉這些東西.....
11/23 00:40, 56F

11/23 00:41, , 57F
現在問題就是driver可否呼叫C#已經build好的dll...需要時間
11/23 00:41, 57F

11/23 00:42, , 58F
測試....沒有這方面的知識跟經驗orz
11/23 00:42, 58F

11/23 01:00, , 59F
要不要說說看是哪個/些API?
11/23 01:00, 59F

11/23 01:10, , 60F
假如是kernel mode driver基本上應該無法直接呼叫manage的
11/23 01:10, 60F

11/23 01:11, , 61F
dll,不過如果是user mode driver說不定有機會
11/23 01:11, 61F

11/23 10:06, , 62F
不然原po就把實際情形講清楚
11/23 10:06, 62F

11/23 10:07, , 63F
並不是所有的driver都可以UMDF的
11/23 10:07, 63F

11/23 10:08, , 64F
基本上kernel mode不能用user mode api是註定的
11/23 10:08, 64F

11/23 10:08, , 65F
不管你是managed或native的api都一樣
11/23 10:08, 65F

11/23 10:09, , 66F
不能用的東西想破頭也沒用,就是要轉一個思考方向
11/23 10:09, 66F
文章代碼(AID): #1EorqXR7 (C_and_CPP)
文章代碼(AID): #1EorqXR7 (C_and_CPP)