作者photon3108 (John)
看板C_and_CPP
標題Re: [問題] DLL問題
時間Fri Apr 10 18:47:04 2009
※ 引述《pakker (找尋蔚藍天空)》之銘言:
: ※ 引述《billmin (hahaha)》之銘言:
: : 我看 http://www.ulinks.com.tw/win32/ 裡面DLL介紹
: : 說到DLL 連結有兩種
: : 一種是顯式
: : 用LoadLibrary()函式載入DLL
: : 接著使用GetProcessAddress()
: : 函式取得所要使用的函式的位址
: : 最後在不需要用到此DLL時,呼叫FreeLibrary()函式將DLL釋放
: : 另一種是把.h檔 跟Lib檔弄進去
: : 然後直接使用這個物件
: : 我想問的是 有沒有辦法用LoadLibrary的方式
: : 然後弄個物件出來使用?
: class A
: {
: private:
: int money;
: public:
: int getmoney();
: }
: DLLEXPORT A* getClassA()
: {
: return new A;
: }
: DLLEXPORT void Free(void *memory)
: {
: delete memory;
: }
: DLL 內 new/malloc 的東西, 只能從 DLL 中去 delete/free.
: (也有例外, 看 link 的 library)
: 詳情請洽 MSDN, 或者看一看相關的 source code
為什麼 "DLL 內 new/malloc 的東西, 只能從 DLL 中去 delete/free."?
我試了一下在 DLL 中 malloc,在使用 DLL 的程式中,得到這個 memory
block ,再 free,好像沒有問題,會潛在什麼問題嗎?
文中提到的例外,又是什麼呢?
謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.161.204.129
推 sunneo:因為有可能同時有多個程式在共享這一個dll 04/10 22:30
→ photon3108:這樣子是指每一個使用此 DLL 的程式,並沒有擁有自己的 04/10 23:25
→ photon3108:一份 malloc 出來的 memory block 嗎? 04/10 23:27
→ photon3108:(就是一人一份 memory block) 04/10 23:30
推 littleshan:共享只會共享 code segment 不會共享 data 04/11 00:08