[問題] VC++ call VB.NET DLL

看板C_and_CPP作者 ( 假日假日假日...)時間10年前 (2013/07/27 22:31), 編輯推噓4(4018)
留言22則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC 2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我有一個VB.NET 的x.dll 裡面有個 class a 內有function b 請問我有辦法直接使用嗎? 是先loadlibrary(x.dll) 再getprocaddress(a::b)嗎?? 又或者 需要其它方法 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.88.189

07/28 01:00, , 1F
請問你的 VB.Net 的 x.dll 檔有用到 .Net 物件嗎?
07/28 01:00, 1F

07/28 01:04, , 2F
如果有的話你的 Visual C++ 必需設定為使用 CLR 功能才能使
07/28 01:04, 2F

07/28 01:07, , 3F
用 .Net 物件喔...因為就算找到函式位址也無法呼叫.
07/28 01:07, 3F

07/28 07:57, , 4F
去查 com 物件 以前有試過 vb call過來 c++ call 回去
07/28 07:57, 4F

07/28 18:39, , 5F
簡單說就是包含 .Net 程式無法跟純 CPU 指令碼程式一起使用
07/28 18:39, 5F

07/28 22:10, , 6F
那也是用loadlibrary(x.dll)再getprocaddress(a::b)嗎?
07/28 22:10, 6F

07/28 22:10, , 7F
因為我getprocaddress(a::b) 但根本捉不到資料
07/28 22:10, 7F

07/28 23:25, , 8F
CLR or COM 樓上都有人說了
07/28 23:25, 8F

07/28 23:57, , 9F
LoadLibrary() 跟 GetProcAddress() 這 2 個函式是針對原生
07/28 23:57, 9F

07/28 23:59, , 10F
DLL 檔使用,所謂的原生就是指裡面包含的是 x86 指令集機器
07/28 23:59, 10F

07/29 00:00, , 11F
碼,它不需要有 .Net 虛擬機器就能交給 CPU 執行,但相對的
07/29 00:00, 11F

07/29 00:04, , 12F
使用 .Net 產生出來的任何執行檔包括 .DLL 檔它裡面並沒有
07/29 00:04, 12F

07/29 00:05, , 13F
機器指令,它跟 Java 一樣是屬於中介語言檔,它需要有虛擬機
07/29 00:05, 13F

07/29 00:08, , 14F
器轉換成真正的機器碼才能執行,當你執行原生 C++ 程式時系
07/29 00:08, 14F

07/29 00:13, , 15F
統並不會交給虛擬機器做解碼而是由 CPU 直接執行,因為 .Net
07/29 00:13, 15F

07/29 00:17, , 16F
包含太多的資料型態定義與函式庫需要做動態連結,因為直接跳
07/29 00:17, 16F

07/29 00:20, , 17F
過虛擬機器,作業系統就會找不到原生 C++ 程式要使用的 .Net
07/29 00:20, 17F

07/29 00:21, , 18F
資料型態與物件了.
07/29 00:21, 18F

07/29 00:38, , 19F
07/29 00:38, 19F

07/30 19:03, , 20F
用COM來溝通。將.NET類別設定成ComVisible,並使用regsvr3
07/30 19:03, 20F

07/30 19:03, , 21F
2註冊。 Native c++ 使用COM的方式來呼叫就可以,只不過CO
07/30 19:03, 21F

07/30 19:03, , 22F
M在Native C++比較複雜。
07/30 19:03, 22F
文章代碼(AID): #1Hyzch-k (C_and_CPP)