各位高手救救我,关于类封装在动态联接库的问题。
我现有的知识是通过以下的方法进行封装。
#include "classH.h"
BOOL WINAPI DLLMain(HINSTANCE hInst,DWORD dwReason,LPVOID lpReserved)
{
return 0;
}
IDXClass* iGetIDX()
{
static CDXUT newIDXClass;
return &newIDXClass;
}
通过以下方法进行调用。
typedef IDXClass* (iGetIDX)();
HMODULE HmyDX;
HmyDX=LoadLibrary("CDX_DLL.dll");
iGetIDX* lp=(iGetIDX*)GetProcAddress(HmyDX,"iGetIDX");
myDX=(*lp)();
但是我发现有个问题,这样的类只有一个对象实体(可能是因为static造成的,但是不用静态修饰就会在过程执行后消失)。我用多个模块句柄调用也是同一个内存地址。
当我需要多个类的对象的时候就无法实现了(比如多个模型,多个灯光)。各位高手能不能告诉我一个可以多对象的封装办法和调用方法。不胜感激。
如果各位大侠实在太忙,给我伪代码,或者代码让我自己参透也行。
问题点数:100、回复次数:4Top
1 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-02 10:56:23 得分 60
一个dll在不同的进程下是独立的对象
在同一个进程下只有一个对象实体
不用静态的,你new出来返回呗,然后自己释放Top
2 楼popy007(Twinsen)回复于 2006-03-02 13:02:31 得分 40
用new分配,或者:
#include "classH.h"
BOOL WINAPI DLLMain(HINSTANCE hInst,DWORD dwReason,LPVOID lpReserved)
{
return 0;
}
const int MAX_IDX = 100;
static CDXUT newIDXClass[MAX_IDX];
static int counter = 0;
IDXClass* iGetIDX()
{
if(counter++<MAX_IDX)
return &newIDXClass[i];
return 0;
}Top
3 楼dreamliar2006()回复于 2006-03-02 16:59:12 得分 0
二位高手,简直就是我的救命父母。 太感谢了。Top
4 楼dreamliar2006()回复于 2006-03-02 17:01:55 得分 0
二位的方法我都try了一下,真的可以哦。
那只能按照系统耗费给分了,两位高手不回怪罪我吧。Top




