[問題] 使用 & 製作 dll的問題
大家好 今天在試著寫簡單的DLL看怎麼用
目前我是用vc8 開 console專案 Application type選dll 勾選export symbols
然後就開始試著玩看看
產生了.lib .dll和 原來的.h
想問各位
我寫.h檔案 是不是一定要使用
#ifdef __cplusplus
extern "C" {
把宣告的函式包起來
在另一個讀dll的程式利用
HMODULE hGAL=LoadLibrary("xxx.dll")
GetProcAddress(hGAL,"function_name") <=======這函式讀取某function
問題1
之前卡在一直都無法讀到這函式 原來是沒加上extern"C"
所以C++ compiler會對function name做手腳 導致找不到這function
所以寫dll一定要使用extern"C"來包嗎??
如果不用extern"C"包 就一定要附上.lib, 不要用GetProcAddress來找函式
以上是我測試所得到的心得但是不知道是不是真的這樣子@@
問題2
如果dll裡面有寫class
是不是就一定要附上 .lib 才可以利用這class產生instance
有沒有類似問題一的函式可以讀取class嗎??(我想說是不是可以不用給.lib)
因為我同事說他沒給lib也可以new一個class的instance 讓我覺得很怪異..
我卻一直出現無法解析的外部符號 需要附上lib才可以.....
問題3
我以為作dll就不會產生lib檔案
之前編譯靜態lib 就想成 把cpp轉換成lib 其實lib就是cpp~~
但是今天做dll 原來會產生.lib檔案
請教各位這lib檔案是紀錄什麼資訊
明明定義的資訊都跑到dll了為什麼還需要lib檔案呢
以上問題有點煩雜 想釐清觀念
謝謝各位~
ps. 另外有看到某個前輩code 有使用interface這關鍵字 行為很像class
這也是跟做DLL有關嗎= = thx
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.147.15.66
※ 編輯: QQ29 來自: 122.147.15.66 (12/24 19:35)
※ 編輯: QQ29 來自: 122.147.15.66 (12/24 20:10)
※ 編輯: QQ29 來自: 122.147.15.66 (12/24 20:12)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 6 篇):