MFC加载动态链接库方法

Posted 郑军学长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC加载动态链接库方法相关的知识,希望对你有一定的参考价值。

1、LoadDll.cpp

 1 #include "StdAfx.h"
 2 #include "LoadDLL.h"
 3 
 4 pMFCCallBackDll    DLL_MFCCallBackDll;
 5 
 6 HINSTANCE    g_Hinstance;    //实例句柄
 7 
 8 //加载DLL
 9 BOOL LoadDll(char *name)
10 {
11     //char name[200] = {""};    //DLL名字存放,且,最大长度为50                /*------------这里-----------------*/
12     //g_Hinstance = LoadLibrary(name);
13     if(g_Hinstance != NULL) return TRUE;    //如果g_Hinstance不为空就返回
14 
15     //name = {""};
16     //memset(name, 0, sizeof(char)*200);    //清空数组                        /*------------这里-----------------*/
17     //g_Hinstance = LoadLibrary(name);
18     DLL_MFCCallBackDll = NULL;
19 
20     //sprintf(name,"C://Users//Administrator//Desktop//ZJDLLV1.0.3.dll");/*------------这里-----------------*/
21     g_Hinstance = LoadLibrary(name);
22     if(g_Hinstance == NULL)
23     {
24         AfxMessageBox("加载dll动态库失败!");
25         return FALSE;
26     }
27 
28     DLL_MFCCallBackDll = (pMFCCallBackDll)GetProcAddress(g_Hinstance, "ZJY_我的");
29     if(NULL == DLL_MFCCallBackDll)
30     {
31         AfxMessageBox("加载动态库MFCCallBackDllTest函数失败");
32         FreeLibrary(g_Hinstance);
33         g_Hinstance = NULL;
34         return FALSE;
35     }
36     return TRUE;
37 }
38 
39 //卸载DLL
40 void QuitDll()
41 {
42     if (g_Hinstance != NULL)
43     {
44         DLL_MFCCallBackDll = NULL;
45         FreeLibrary(g_Hinstance);
46         g_Hinstance = NULL;
47     }
48 }

 

2、LoadDll.h

 1 #ifndef __MFCCLOADDLL_H
 2 #define __MFCCLOADDLL_H
 3 
 4 #include <windows.h>
 5 
 6 BOOL LoadDll(char *name);    //加载DLL
 7 void QuitDll(); //卸载DLL
 8 
 9 typedef WORD (WINAPI *pMFCCallBackDll)(WORD a);    //返回cahr *
10 
11 extern pMFCCallBackDll    DLL_MFCCallBackDll;    //外部定义
12 
13 #endif        //__MFCCLOADDLL_H

 

3、调用主界面

 1 // testDllDlg.cpp : 实现文件
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "testDll.h"
 6 #include "testDllDlg.h"
 7 #include "afxdialogex.h"
 8 #include "LoadDLL.h"
 9 
10 ******
11 ******
12 /*这里是原来默认代码*/
13 ******
14 ******
15 
16 
17 void CtestDllDlg::OnBnClickedOk()
18 {
19     WORD  reslut = DLL_MFCCallBackDll(1);
20 
21     if(reslut == 1)
22     {
23         AfxMessageBox("软件可正常使用!");
24     }
25     else if(reslut == 0)
26     {
27         AfxMessageBox("软件已过期!");
28     }
29 }    

 

以上是关于MFC加载动态链接库方法的主要内容,如果未能解决你的问题,请参考以下文章

(转载)DLL动态链接库编程入门之三:MFC规则DLL(上)

(转载)DLL动态链接库编程入门之二:非MFC DLL

MFC:_AFXDLL

将 DLL 加载到 MFC 中的不同方法?

(转载)DLL动态链接库编程入门之五:MFC扩展DLL

VC/MFC动态库Debug版本下正常,Release版本下错误