Re: [問題] DLL問題

看板C_and_CPP作者 (John)時間15年前 (2009/04/10 18:47), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/10 (看更多)
※ 引述《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

04/10 22:30, , 1F
因為有可能同時有多個程式在共享這一個dll
04/10 22:30, 1F

04/10 23:25, , 2F
這樣子是指每一個使用此 DLL 的程式,並沒有擁有自己的
04/10 23:25, 2F

04/10 23:27, , 3F
一份 malloc 出來的 memory block 嗎?
04/10 23:27, 3F

04/10 23:30, , 4F
(就是一人一份 memory block)
04/10 23:30, 4F

04/11 00:08, , 5F
共享只會共享 code segment 不會共享 data
04/11 00:08, 5F
文章代碼(AID): #19toEfII (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19toEfII (C_and_CPP)