作者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
1F:推 sunneo:因为有可能同时有多个程式在共享这一个dll 04/10 22:30
2F:→ photon3108:这样子是指每一个使用此 DLL 的程式,并没有拥有自己的 04/10 23:25
3F:→ photon3108:一份 malloc 出来的 memory block 吗? 04/10 23:27
4F:→ photon3108:(就是一人一份 memory block) 04/10 23:30
5F:推 littleshan:共享只会共享 code segment 不会共享 data 04/11 00:08