看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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