• MFC/C++调用易语言的整数型+文本型与VS2010互动


    版权说明:转载请注明,转自郑军学长(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、教程结束。

  • 相关阅读:
    LeetCode_4——寻找两个有序数组的中位数
    Java的CAS与ABA问题
    跨域问题解决
    解决git-for-windows官网下载速度慢的问题
    Java对观察者模式的支持
    Java动态代理
    设计模式七大原则
    UML中的类图关系
    布隆过滤器(Bloom Filter)与Hash算法
    Ubuntu16安装fabric1.4.4环境
  • 原文地址:https://www.cnblogs.com/ZHENGJUNupperclassman/p/7490230.html
Copyright © 2020-2023  润新知