郑军学长

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

版权说明:转载请注明,转自郑军学长(MFC/C++调用易语言的整数型+文本型与VS2010互动),http://www.cnblogs.com/ZHENGJUNupperclassman/p/7490230.html

 

1、LoadDll.cpp

 1 #include "StdAfx.h"
 2 #include "LoadDLL.h"
 3 
 4 pMFCdll_OneVOID_OneVOID        MFCdll_OneVOID_OneVOID;
 5 pMFCdll_OneWORD_OneVOID        MFCdll_OneWORD_OneVOID;
 6 pMFCdll_OneCHAR_OneVOID        MFCdll_OneCHAR_OneVOID;
 7 
 8 
 9 pMFCdll_OneWORD_OneWORD        MFCdll_OneWORD_OneWORD;
10 pMFCdll_OneWORD_TwoWORD        MFCdll_OneWORD_TwoWORD;
11 pMFCdll_OneWORD_ThreeWORD    MFCdll_OneWORD_ThreeWORD;
12 pMFCdll_OneWORD_FourWORD    MFCdll_OneWORD_FourWORD;
13 pMFCdll_OneWORD_FiveWORD    MFCdll_OneWORD_FiveWORD;
14 pMFCdll_OneWORD_SixWORD        MFCdll_OneWORD_SixWORD;
15 
16 
17 pMFCdll_OneWORD_OneChar        MFCdll_OneWORD_OneChar;
18 pMFCdll_OneWORD_TwoChar        MFCdll_OneWORD_TwoChar;
19 pMFCdll_OneWORD_ThreeChar    MFCdll_OneWORD_ThreeChar;
20 pMFCdll_OneWORD_FourChar    MFCdll_OneWORD_FourChar;
21 pMFCdll_OneWORD_FiveChar    MFCdll_OneWORD_FiveChar;
22 pMFCdll_OneWORD_SixChar        MFCdll_OneWORD_SixChar;
23 
24 
25 pMFCdll_OneChar_OneChar        MFCdll_OneChar_OneChar;
26 pMFCdll_OneChar_TwoChar        MFCdll_OneChar_TwoChar;
27 pMFCdll_OneChar_ThreeChar    MFCdll_OneChar_ThreeChar;
28 pMFCdll_OneChar_FourChar    MFCdll_OneChar_FourChar;
29 pMFCdll_OneChar_FiveChar    MFCdll_OneChar_FiveChar;
30 pMFCdll_OneChar_SixChar        MFCdll_OneChar_SixChar;
31 
32 
33 pMFCdll_OneChar_OneWORD        MFCdll_OneChar_OneWORD;
34 pMFCdll_OneChar_TwoWORD        MFCdll_OneChar_TwoWORD;
35 pMFCdll_OneChar_ThreeWORD    MFCdll_OneChar_ThreeWORD;
36 pMFCdll_OneChar_FourWORD    MFCdll_OneChar_FourWORD;
37 pMFCdll_OneChar_FiveWORD    MFCdll_OneChar_FiveWORD;
38 pMFCdll_OneChar_SixWORD        MFCdll_OneChar_SixWORD;
39 
40 
41 HINSTANCE    g_Hinstance;    //实例句柄
42 
43 
44 //加载DLL
45 BOOL LoadDll(char *name)
46 {
47     
48     if(g_Hinstance != NULL) return TRUE;    //如果g_Hinstance不为空就返回
49 
50     MFCdll_OneWORD_SixWORD = NULL;    //这里是加载ZJY_SoftOverTime用的
51     MFCdll_OneCHAR_OneVOID = NULL;    //这里是加载ZJY_GetSystemDisk用的
52 
53     g_Hinstance = LoadLibrary(name);
54     if(g_Hinstance == NULL)
55     {
56 //        AfxMessageBox("加载dll动态库失败!");
57         return FALSE;
58     }
59 
60     MFCdll_OneWORD_SixWORD = (pMFCdll_OneWORD_SixWORD)GetProcAddress(g_Hinstance, "ZJY_SoftOverTime");
61     MFCdll_OneCHAR_OneVOID = (pMFCdll_OneCHAR_OneVOID)GetProcAddress(g_Hinstance, "ZJY_GetSystemDisk");
62     if(NULL == MFCdll_OneWORD_SixWORD || NULL == MFCdll_OneCHAR_OneVOID)
63     {
64 //        AfxMessageBox("加载动态库MFCCallBackDllTest函数失败");
65         FreeLibrary(g_Hinstance);
66         g_Hinstance = NULL;
67         return FALSE;
68     }
69     return TRUE;
70 }
71 
72 //卸载DLL
73 void UninstallDll()
74 {
75     if (g_Hinstance != NULL)
76     {
77         MFCdll_OneWORD_SixWORD = NULL;
78         MFCdll_OneCHAR_OneVOID = NULL;
79         FreeLibrary(g_Hinstance);
80         g_Hinstance = NULL;
81     }
82 }

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 UninstallDll();        //卸载DLL
 8 
 9 /************************************************************************/
10 /*易语言:没参数带返回值的,不带的。
11 /***********************************************************************/
12 typedef void    (WINAPI *pMFCdll_OneVOID_OneVOID)    ();    //返回VOID
13 typedef WORD    (WINAPI *pMFCdll_OneWORD_OneVOID)   ();    //返回WORD
14 typedef char *  (WINAPI *pMFCdll_OneCHAR_OneVOID)   ();    //返回CHAR
15 
16 /************************************************************************/
17 /*易语言:整数型接口   <返回值,整数型>(整数型 a, 整数型 b,整数型 c,整数型 d,整数型 e,整数型 f)*/
18 /***********************************************************************/
19 typedef WORD (WINAPI *pMFCdll_OneWORD_OneWORD)    (WORD a);    //返回WORD
20 typedef WORD (WINAPI *pMFCdll_OneWORD_TwoWORD)    (WORD a , WORD b);    //返回WORD
21 typedef WORD (WINAPI *pMFCdll_OneWORD_ThreeWORD)(WORD a , WORD b ,WORD c);    //返回WORD
22 typedef WORD (WINAPI *pMFCdll_OneWORD_FourWORD)    (WORD a , WORD b ,WORD c ,WORD d);    //返回WORD
23 typedef WORD (WINAPI *pMFCdll_OneWORD_FiveWORD)    (WORD a , WORD b ,WORD c ,WORD d ,WORD e);    //返回WORD
24 typedef WORD (WINAPI *pMFCdll_OneWORD_SixWORD)    (WORD a , WORD b ,WORD c ,WORD d ,WORD e,WORD f);    //返回WORD
25 
26 typedef WORD (WINAPI *pMFCdll_OneWORD_OneChar)    (char * a);    //返回WORD
27 typedef WORD (WINAPI *pMFCdll_OneWORD_TwoChar)    (char * a , char * b);    //返回WORD
28 typedef WORD (WINAPI *pMFCdll_OneWORD_ThreeChar)(char * a , char * b ,char * c);    //返回WORD
29 typedef WORD (WINAPI *pMFCdll_OneWORD_FourChar)    (char * a , char * b ,char * c ,char * d);    //返回WORD
30 typedef WORD (WINAPI *pMFCdll_OneWORD_FiveChar)    (char * a , char * b ,char * c ,char * d ,char * e);    //返回WORD
31 typedef WORD (WINAPI *pMFCdll_OneWORD_SixChar)    (char * a , char * b ,char * c ,char * d ,char * e,char * f);    //返回WORD
32 
33 /************************************************************************/
34 /*易语言:字符串接口   <返回值,CString>(文本型 a, 整数型 b,整数型 c,整数型 d,整数型 e,整数型 f)*/
35 /***********************************************************************/
36 typedef char * (WINAPI *pMFCdll_OneChar_OneChar)    (char *);    //返回cahr *
37 typedef char * (WINAPI *pMFCdll_OneChar_TwoChar)    (char * , char *);    //返回cahr *
38 typedef char * (WINAPI *pMFCdll_OneChar_ThreeChar)    (char * , char * ,char *);    //返回cahr *
39 typedef char * (WINAPI *pMFCdll_OneChar_FourChar)    (char * , char * ,char * ,char *);    //返回cahr *
40 typedef char * (WINAPI *pMFCdll_OneChar_FiveChar)    (char * , char * ,char * ,char * ,char *);    //返回cahr *
41 typedef char * (WINAPI *pMFCdll_OneChar_SixChar)    (char * , char * ,char * ,char * ,char * ,char *);    //返回cahr *
42 
43 typedef char * (WINAPI *pMFCdll_OneChar_OneWORD)    (WORD a);    //返回cahr *
44 typedef char * (WINAPI *pMFCdll_OneChar_TwoWORD)    (WORD a , WORD b);    //返回cahr *
45 typedef char * (WINAPI *pMFCdll_OneChar_ThreeWORD)    (WORD a , WORD b ,WORD c);    //返回cahr *
46 typedef char * (WINAPI *pMFCdll_OneChar_FourWORD)    (WORD a , WORD b ,WORD c ,WORD d);    //返回cahr *
47 typedef char * (WINAPI *pMFCdll_OneChar_FiveWORD)    (WORD a , WORD b ,WORD c ,WORD d ,WORD e);    //返回cahr *
48 typedef char * (WINAPI *pMFCdll_OneChar_SixWORD)    (WORD a , WORD b ,WORD c ,WORD d ,WORD e,WORD f);    //返回cahr *
49 
50 /************************************************************************/
51 /*易语言使用外部定义
52 /***********************************************************************/
53 extern pMFCdll_OneVOID_OneVOID        MFCdll_OneVOID_OneVOID;
54 extern pMFCdll_OneWORD_OneVOID        MFCdll_OneWORD_OneVOID;
55 extern pMFCdll_OneCHAR_OneVOID        MFCdll_OneCHAR_OneVOID;
56 
57 
58 extern pMFCdll_OneWORD_OneWORD        MFCdll_OneWORD_OneWORD;
59 extern pMFCdll_OneWORD_TwoWORD        MFCdll_OneWORD_TwoWORD;
60 extern pMFCdll_OneWORD_ThreeWORD    MFCdll_OneWORD_ThreeWORD;
61 extern pMFCdll_OneWORD_FourWORD        MFCdll_OneWORD_FourWORD;
62 extern pMFCdll_OneWORD_FiveWORD        MFCdll_OneWORD_FiveWORD;
63 extern pMFCdll_OneWORD_SixWORD        MFCdll_OneWORD_SixWORD;
64 
65 
66 extern pMFCdll_OneWORD_OneChar        MFCdll_OneWORD_OneChar;
67 extern pMFCdll_OneWORD_TwoChar        MFCdll_OneWORD_TwoChar;
68 extern pMFCdll_OneWORD_ThreeChar    MFCdll_OneWORD_ThreeChar;
69 extern pMFCdll_OneWORD_FourChar        MFCdll_OneWORD_FourChar;
70 extern pMFCdll_OneWORD_FiveChar        MFCdll_OneWORD_FiveChar;
71 extern pMFCdll_OneWORD_SixChar        MFCdll_OneWORD_SixChar;
72 
73 
74 extern pMFCdll_OneChar_OneChar        MFCdll_OneChar_OneChar;
75 extern pMFCdll_OneChar_TwoChar        MFCdll_OneChar_TwoChar;
76 extern pMFCdll_OneChar_ThreeChar    MFCdll_OneChar_ThreeChar;
77 extern pMFCdll_OneChar_FourChar        MFCdll_OneChar_FourChar;
78 extern pMFCdll_OneChar_FiveChar        MFCdll_OneChar_FiveChar;
79 extern pMFCdll_OneChar_SixChar        MFCdll_OneChar_SixChar;
80 
81 
82 extern pMFCdll_OneChar_OneWORD        MFCdll_OneChar_OneWORD;
83 extern pMFCdll_OneChar_TwoWORD        MFCdll_OneChar_TwoWORD;
84 extern pMFCdll_OneChar_ThreeWORD    MFCdll_OneChar_ThreeWORD;
85 extern pMFCdll_OneChar_FourWORD        MFCdll_OneChar_FourWORD;
86 extern pMFCdll_OneChar_FiveWORD        MFCdll_OneChar_FiveWORD;
87 extern pMFCdll_OneChar_SixWORD        MFCdll_OneChar_SixWORD;
88 
89 
90 #endif        //MFCCLOADDLL_H

3、这里为不带Dlg的那个项目文件

 1 // testDll.cpp : 定义应用程序的类行为。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "testDll.h"
 6 #include "testDllDlg.h"
 7 
 8 #include "LoadDLL.h"
 9 
10 //*************原来的代码不动******************
11 
12 BOOL CtestDllApp::InitInstance()
13 {    
14         //这里上面不动,下面加载DLL,就是游戏读条一样的,现在只有一个
15     if(LoadDll("C://Users//Administrator//Desktop//ZJDLLV1.0.3.dll") == FALSE)
16     {
17 
18         AfxMessageBox("ZJDLLV1.0.3.dll,加载失败!");
19         AfxGetMainWnd()->CloseWindow();        
20     }
21     else
22     {
23         AfxMessageBox("ZJDLLV1.0.3.dll,加载成功!");
24     }
25         //下面系统的
26     CtestDllDlg dlg;
27     m_pMainWnd = &dlg;
28     INT_PTR nResponse = dlg.DoModal();
29     if (nResponse == IDOK)
30     {
31         // TODO: 在此放置处理何时用
32         //  “确定”来关闭对话框的代码
33     }
34     else if (nResponse == IDCANCEL)
35     {
36         // TODO: 在此放置处理何时用
37         //  “取消”来关闭对话框的代码
38     }
39 
40     // 删除上面创建的 shell 管理器。
41     if (pShellManager != NULL)
42     {
43         delete pShellManager;
44     }
45 
46     // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
47     //  而不是启动应用程序的消息泵。
48     return FALSE;
49 }

 

4、这里带Dlg的那个项目文件

 1 #include "LoadDLL.h"
 2 //-------中间的不动---------
 3 //这里是按钮单机自动生成的槽函数
 4 void CtestDllDlg::OnBnClickedOk()
 5 {  
 6     WORD  reslut = MFCdll_OneWORD_SixWORD(2017,9,7,15,23,0);
 7 
 8     if(reslut == 1)
 9     {
10         AfxMessageBox("软件可正常使用!");
11     }
12     else if(reslut == 0)
13     {
14         AfxMessageBox("软件已过期!");
15     }
16 
17     AfxMessageBox(MFCdll_OneCHAR_OneVOID());
18 }

 

5、教程结束。

 

posted on 2017-09-07 15:58  郑军学长  阅读(771)  评论(0编辑  收藏  举报