hur.cn - 华软网

 热门搜索

MFC动态机制与动态库问题

  作者:未知    来源:网络    更新时间:2011/8/11
这是模仿MFC的宏定义
C++">
#define RUNTIME_SERVICE(class_name) ((CRuntimeService*)(&class_name::m_stService##class_name))

// dynamically constructable
#define DECLARE_DYNCREATE_SERVICE(class_name) \
public: \
static const CRuntimeService m_stService##class_name; \
virtual CRuntimeService* GetRuntimeClass() const; \
static CServiceBase* CreateService(); 

#define IMPLEMENT_DYNCREATE_SERVICE(class_name, base_class_name) \
const struct CRuntimeService class_name::m_stService##class_name(#class_name, RUNTIME_SERVICE(base_class_name), class_name::CreateService); \
CRuntimeService* class_name::GetRuntimeClass() const \
{ return RUNTIME_SERVICE(class_name); } \
CServiceBase* class_name::CreateService() \
{ return new class_name; } \


#define INTERFACE_SERVICE_REGISTER \
extern "C" CRuntimeService* register_service(){ \
return CRuntimeService::m_pFirstService;\
}


定义一个函数
C++">
extern "C" CRuntimeService* register_service()

return CRuntimeService::m_pFirstService;
}


MFC那样,定义一个基类、运行时信息类,定义几个继承自基类的子类,模仿MFC来生成运行时的动态链 my.dll,然后将这些子类编译成一个动态链接库,那么知道入口函数 "register_service" 的名称
在主程序中 
C++">
typedef CRuntimeService* (*pServiceRegisterFunc)();
handle = LoadLibrary("my.dll");
pServiceRegisterFunc pRegisterFun = (pServiceRegisterFunc)GetProcAddress(hanle, "register_service");
CRuntimeService* pRuntimeService=pRegisterFun();

我的问题是,运行时的动态链是在什么时刻加载完成的,如何确定加载各个子类的顺序
CRuntimeService* pRuntimeService=pRegisterFun();
return CRuntimeService::m_pFirstService;
这时 CRuntimeService::m_pFirstService; 在什么时候已经初始化了
---华软 网友回答---
可以看看《深入浅出MFC》
---华软网友回复---
#define IMPLEMENT_DYNCREATE_SERVICE(class_name, base_class_name) ....

这玩意是静态的,编译的时候就整好了
---华软网友回复---
进来学习的 
---华软网友回复---
CRuntimeService::m_pFirstService;没有看到相关代码,不能确定什么时候产生的

注意的是CreateService()是创建入口,调用了new
---华软网友回复---

不懂      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。