Re: [問題] 如果手上有一堆.dll,也知道function的ꬠ…

看板C_and_CPP (C/C++)作者 (有趣生活)時間18年前 (2006/09/05 17:24), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
※ 引述《maxi326 (不想再留白)》之銘言: : 對dll認識不多 : 在用vc6寫程式 : 從網路上下載到一些dll : 他說可以應用在自己寫的vc程式上 : 有個說明檔但都只有簡單的宣告 : eg.VARIANT_BOOL Connect_Net([in] BSTR IPAdd, [in] LONG Port) : 我知這是vb的宣告方式 vb ?? 那宣告看來應該還是比較像 C 吧 只是那個 [in] 應該是為了說明,表示是要傳入資訊的參數 (不過 VARIANT_BOOL 和 BSTR 也是 COM programming 常用的資料型態就是了) : 但他應該是win32 api一樣大家都通用 這個就不是稱作 win32 API 了 這只是別人寫的 DLL 所 export 出來的函式 : 那些dll都經compile過,沒辦法看 : 我要怎樣才可以用到這些function呢? : 是這樣用嗎? : extern "C" __declspec(dllimport) Connect_Net(BSTR IPAdd, LONG Port); : 但build的時候會有問題 : conn.obj : error LNK2001: unresolved external symbol __imp__Connect_Net : Debug/try_zk_conn.exe : fatal error LNK1120: 1 unresolved externals 你說沒 .lib 檔案,那用這樣 import 方式就不行了 有裝 VC 的話找一下它的安裝目錄,有個 dumpbin.exe 的命令列工具 找到之後執行 "dumpbin dll檔案名稱 /exports" 看一下實際上 Connect_Net 被 DLL 所匯出 (export) 的名稱到底是什麼 有了確切的名稱之後 就用 LoadLibrary 在執行時動態載入 DLL 檔案 然後 GetProcAddress 取出函式位址,存到一個函式指標 之後就用該函式指標來呼叫那功能.. 順便要注意那個函式是 __cdecl 還是 __stdcall,找一下文件 (我是猜後者機率較大啦..) 有時候從 DLL 的函式匯出名稱也看得出來 你先用 dumpbin 看一下吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.210.68

09/05 17:53, , 1F
嗯,謝謝你,剛剛找一下google看到類似的東西,但網上的說得
09/05 17:53, 1F

09/05 17:54, , 2F
不夠清楚,謝謝你的說明,我再試一下
09/05 17:54, 2F
文章代碼(AID): #14_K91mw (C_and_CPP)
文章代碼(AID): #14_K91mw (C_and_CPP)