关于MFC规则DLL...

1、MFC规则DLL特点:

●DLL内部可以使用MFC类库;

●可以被其他所有支持DLL技术的语言所调用。


/
2、MFC规则DLL的入口点函数:

默认情况下DLL的入口点函数都是DllMain,MFC规则DLL也不例外,

但是因为是支持MFC的,所以在MFC规则DLL中,DllMain函数已经被MFC所封装,

所以在你的工程中是看不到DllMain函数的,就好像在MFC对话框工程中你找不到WinMain函数一样的,

不过也有一些补救的技巧,就是InitInstance()与ExitInstance()函数,

当进程初始化调用DLL时,DLL中会默认调用那个InitInstance()函数,

当EXE退出时DLL会调用ExitInstance()函数,但是当有新线程时,处于程序安全性考虑则没有什么好的办法进行处理。


/
3、MFC规则DLL分为两类:

1●静态链接到MFC的规则DLL:

与MFC库静态链接,会将MFC类库的代码直接编译生成到DLL文件中,

在调用这种DLL的接口时,MFC使用DLL的资源,

因此,不需要模块状态的切换,但是缺点就是使用这种方式生成的DLL文件大小比较大。

2●动态链接到MFC的规则DLL:

可以和调用DLL的EXE同时动态链接到MFC库,

在这种情况下,MFC使用主应用程序(即:EXE程序)的资源句柄来加载资源模版,

这样,当DLL和应用程序中存在相同ID的资源时,

就要进行模块的切换,以便MFC能够找到正确的资源模版。
/
4、MFC规则DLL的模块状态切换:

三种方法:

//第一种方法就是在Dll导出函数的第一条语句写入以下代码
①AFX_MANAGE_STATE(AfxGetStaticModuleState());


//举例如下:
int add(int a,int b) //add为Dll文件中的导出函数
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); //固定语句
    return (a+b);
}



//第二种方法就是在Dll导出函数的头部和尾部写入以下代码
② HINSTANCE hSaveInst = AfxGetResourceHandle();
    AfxSetResourceHandle(theApp.m_hInstance);
    ... ... //执行语句;
    AfxSetResourceHandle(hSaveInst);

    
//举例如下:
int add(int a,int b) //add为Dll文件中的导出函数
{
     HINSTANCE hSaveInst = AfxGetResourceHandle(); //固定语句
     AfxSetResourceHandle(theApp.m_hInstance); //固定语句
     
     return (a+b); 执行语句
     
    AfxSetResourceHandle(hSaveInst); //固定语句
}



//第三种方法就是在调用Dll的应用程序中添加以下代码
③     HINSTANCE hExeInst = GetModuleHandle(NULL);
HINSTANCE hDLLInst = GetModuleHandle(_T("MFCDLL.dll"));
        ASSERT(hExeInst && hDLLInst);
        AfxSetResourceHandle(hDLLInst);
        
... ... //执行Dll中的函数;
    
    AfxSetResourceHandle(hExeInst);

    
  //举例如下:
  void CallAdd() //CallAdd为调用Dll程序中的一个函数,如MFC对话框程序
  {
HINSTANCE hExeInst = GetModuleHandle(NULL); //固定语句
HINSTANCE hDLLInst = GetModuleHandle(_T("MFCDLL.dll")); //固定语句
        ASSERT(hExeInst && hDLLInst); //固定语句
        AfxSetResourceHandle(hDLLInst); //固定语句
        
int c=add(2012,6) ;  //调用Dll中的函数add;
    
    AfxSetResourceHandle(hExeInst); //固定语句
  }


★最方便的还是第一种方法,

前两种是在DLL导出函数中进行添加,

第三种是在EXE程序中进行添加。






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friendan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值