易语言文本型对应c的什么,详解MFC/C++调用易语言的整数型和文本型与VS2010互动...

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

发布时间:2020-09-06 22:57:55

来源:脚本之家

阅读:99

作者:laozhang

1、LoadDll.cpp

#include "StdAfx.h"

#include "LoadDLL.h"

pMFCdll_OneVOID_OneVOID MFCdll_OneVOID_OneVOID;

pMFCdll_OneWORD_OneVOID MFCdll_OneWORD_OneVOID;

pMFCdll_OneCHAR_OneVOID MFCdll_OneCHAR_OneVOID;

pMFCdll_OneWORD_OneWORD MFCdll_OneWORD_OneWORD;

pMFCdll_OneWORD_TwoWORD MFCdll_OneWORD_TwoWORD;

pMFCdll_OneWORD_ThreeWORD MFCdll_OneWORD_ThreeWORD;

pMFCdll_OneWORD_FourWORD MFCdll_OneWORD_FourWORD;

pMFCdll_OneWORD_FiveWORD MFCdll_OneWORD_FiveWORD;

pMFCdll_OneWORD_SixWORD MFCdll_OneWORD_SixWORD;

pMFCdll_OneWORD_OneChar MFCdll_OneWORD_OneChar;

pMFCdll_OneWORD_TwoChar MFCdll_OneWORD_TwoChar;

pMFCdll_OneWORD_ThreeChar MFCdll_OneWORD_ThreeChar;

pMFCdll_OneWORD_FourChar MFCdll_OneWORD_FourChar;

pMFCdll_OneWORD_FiveChar MFCdll_OneWORD_FiveChar;

pMFCdll_OneWORD_SixChar MFCdll_OneWORD_SixChar;

pMFCdll_OneChar_OneChar MFCdll_OneChar_OneChar;

pMFCdll_OneChar_TwoChar MFCdll_OneChar_TwoChar;

pMFCdll_OneChar_ThreeChar MFCdll_OneChar_ThreeChar;

pMFCdll_OneChar_FourChar MFCdll_OneChar_FourChar;

pMFCdll_OneChar_FiveChar MFCdll_OneChar_FiveChar;

pMFCdll_OneChar_SixChar MFCdll_OneChar_SixChar;

pMFCdll_OneChar_OneWORD MFCdll_OneChar_OneWORD;

pMFCdll_OneChar_TwoWORD MFCdll_OneChar_TwoWORD;

pMFCdll_OneChar_ThreeWORD MFCdll_OneChar_ThreeWORD;

pMFCdll_OneChar_FourWORD MFCdll_OneChar_FourWORD;

pMFCdll_OneChar_FiveWORD MFCdll_OneChar_FiveWORD;

pMFCdll_OneChar_SixWORD MFCdll_OneChar_SixWORD;

HINSTANCE g_Hinstance; //实例句柄

//加载DLL

BOOL LoadDll(char *name)

{

if(g_Hinstance != NULL) return TRUE; //如果g_Hinstance不为空就返回

MFCdll_OneWORD_SixWORD = NULL; //这里是加载ZJY_SoftOverTime用的

MFCdll_OneCHAR_OneVOID = NULL; //这里是加载ZJY_GetSystemDisk用的

g_Hinstance = LoadLibrary(name);

if(g_Hinstance == NULL)

{

// AfxMessageBox("加载dll动态库失败!");

return FALSE;

}

MFCdll_OneWORD_SixWORD = (pMFCdll_OneWORD_SixWORD)GetProcAddress(g_Hinstance, "ZJY_SoftOverTime");

MFCdll_OneCHAR_OneVOID = (pMFCdll_OneCHAR_OneVOID)GetProcAddress(g_Hinstance, "ZJY_GetSystemDisk");

if(NULL == MFCdll_OneWORD_SixWORD || NULL == MFCdll_OneCHAR_OneVOID)

{

// AfxMessageBox("加载动态库MFCCallBackDllTest函数失败");

FreeLibrary(g_Hinstance);

g_Hinstance = NULL;

return FALSE;

}

return TRUE;

}

//卸载DLL

void UninstallDll()

{

if (g_Hinstance != NULL)

{

MFCdll_OneWORD_SixWORD = NULL;

MFCdll_OneCHAR_OneVOID = NULL;

FreeLibrary(g_Hinstance);

g_Hinstance = NULL;

}

}

2、LoadDll.h

#ifndef __MFCCLOADDLL_H

#define __MFCCLOADDLL_H

#include

BOOL LoadDll(char *name); //加载DLL

void UninstallDll(); //卸载DLL

/************************************************************************/

/*易语言:没参数带返回值的,不带的。

/***********************************************************************/

typedef void (WINAPI *pMFCdll_OneVOID_OneVOID) (); //返回VOID

typedef WORD (WINAPI *pMFCdll_OneWORD_OneVOID) (); //返回WORD

typedef char * (WINAPI *pMFCdll_OneCHAR_OneVOID) (); //返回CHAR

/************************************************************************/

/*易语言:整数型接口 (整数型 a, 整数型 b,整数型 c,整数型 d,整数型 e,整数型 f)*/

/***********************************************************************/

typedef WORD (WINAPI *pMFCdll_OneWORD_OneWORD) (WORD a); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_TwoWORD) (WORD a , WORD b); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_ThreeWORD)(WORD a , WORD b ,WORD c); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_FourWORD) (WORD a , WORD b ,WORD c ,WORD d); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_FiveWORD) (WORD a , WORD b ,WORD c ,WORD d ,WORD e); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_SixWORD) (WORD a , WORD b ,WORD c ,WORD d ,WORD e,WORD f); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_OneChar) (char * a); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_TwoChar) (char * a , char * b); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_ThreeChar)(char * a , char * b ,char * c); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_FourChar) (char * a , char * b ,char * c ,char * d); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_FiveChar) (char * a , char * b ,char * c ,char * d ,char * e); //返回WORD

typedef WORD (WINAPI *pMFCdll_OneWORD_SixChar) (char * a , char * b ,char * c ,char * d ,char * e,char * f); //返回WORD

/************************************************************************/

/*易语言:字符串接口 (文本型 a, 整数型 b,整数型 c,整数型 d,整数型 e,整数型 f)*/

/***********************************************************************/

typedef char * (WINAPI *pMFCdll_OneChar_OneChar) (char *); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_TwoChar) (char * , char *); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_ThreeChar) (char * , char * ,char *); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_FourChar) (char * , char * ,char * ,char *); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_FiveChar) (char * , char * ,char * ,char * ,char *); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_SixChar) (char * , char * ,char * ,char * ,char * ,char *); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_OneWORD) (WORD a); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_TwoWORD) (WORD a , WORD b); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_ThreeWORD) (WORD a , WORD b ,WORD c); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_FourWORD) (WORD a , WORD b ,WORD c ,WORD d); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_FiveWORD) (WORD a , WORD b ,WORD c ,WORD d ,WORD e); //返回cahr *

typedef char * (WINAPI *pMFCdll_OneChar_SixWORD) (WORD a , WORD b ,WORD c ,WORD d ,WORD e,WORD f); //返回cahr *

/************************************************************************/

/*易语言使用外部定义

/***********************************************************************/

extern pMFCdll_OneVOID_OneVOID MFCdll_OneVOID_OneVOID;

extern pMFCdll_OneWORD_OneVOID MFCdll_OneWORD_OneVOID;

extern pMFCdll_OneCHAR_OneVOID MFCdll_OneCHAR_OneVOID;

extern pMFCdll_OneWORD_OneWORD MFCdll_OneWORD_OneWORD;

extern pMFCdll_OneWORD_TwoWORD MFCdll_OneWORD_TwoWORD;

extern pMFCdll_OneWORD_ThreeWORD MFCdll_OneWORD_ThreeWORD;

extern pMFCdll_OneWORD_FourWORD MFCdll_OneWORD_FourWORD;

extern pMFCdll_OneWORD_FiveWORD MFCdll_OneWORD_FiveWORD;

extern pMFCdll_OneWORD_SixWORD MFCdll_OneWORD_SixWORD;

extern pMFCdll_OneWORD_OneChar MFCdll_OneWORD_OneChar;

extern pMFCdll_OneWORD_TwoChar MFCdll_OneWORD_TwoChar;

extern pMFCdll_OneWORD_ThreeChar MFCdll_OneWORD_ThreeChar;

extern pMFCdll_OneWORD_FourChar MFCdll_OneWORD_FourChar;

extern pMFCdll_OneWORD_FiveChar MFCdll_OneWORD_FiveChar;

extern pMFCdll_OneWORD_SixChar MFCdll_OneWORD_SixChar;

extern pMFCdll_OneChar_OneChar MFCdll_OneChar_OneChar;

extern pMFCdll_OneChar_TwoChar MFCdll_OneChar_TwoChar;

extern pMFCdll_OneChar_ThreeChar MFCdll_OneChar_ThreeChar;

extern pMFCdll_OneChar_FourChar MFCdll_OneChar_FourChar;

extern pMFCdll_OneChar_FiveChar MFCdll_OneChar_FiveChar;

extern pMFCdll_OneChar_SixChar MFCdll_OneChar_SixChar;

extern pMFCdll_OneChar_OneWORD MFCdll_OneChar_OneWORD;

extern pMFCdll_OneChar_TwoWORD MFCdll_OneChar_TwoWORD;

extern pMFCdll_OneChar_ThreeWORD MFCdll_OneChar_ThreeWORD;

extern pMFCdll_OneChar_FourWORD MFCdll_OneChar_FourWORD;

extern pMFCdll_OneChar_FiveWORD MFCdll_OneChar_FiveWORD;

extern pMFCdll_OneChar_SixWORD MFCdll_OneChar_SixWORD;

#endif //MFCCLOADDLL_H

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

// testDll.cpp : 定义应用程序的类行为。

//

#include "stdafx.h"

#include "testDll.h"

#include "testDllDlg.h"

#include "LoadDLL.h"

//*************原来的代码不动******************

BOOL CtestDllApp::InitInstance()

{

//这里上面不动,下面加载DLL,就是游戏读条一样的,现在只有一个

if(LoadDll("C://Users//Administrator//Desktop//ZJDLLV1.0.3.dll") == FALSE)

{

AfxMessageBox("ZJDLLV1.0.3.dll,加载失败!");

AfxGetMainWnd()->CloseWindow();

}

else

{

AfxMessageBox("ZJDLLV1.0.3.dll,加载成功!");

}

//下面系统的

CtestDllDlg dlg;

m_pMainWnd = &dlg;

INT_PTR nResponse = dlg.DoModal();

if (nResponse == IDOK)

{

// TODO: 在此放置处理何时用

// “确定”来关闭对话框的代码

}

else if (nResponse == IDCANCEL)

{

// TODO: 在此放置处理何时用

// “取消”来关闭对话框的代码

}

// 删除上面创建的 shell 管理器。

if (pShellManager != NULL)

{

delete pShellManager;

}

// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,

// 而不是启动应用程序的消息泵。

return FALSE;

}

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

#include "LoadDLL.h"

//-------中间的不动---------

//这里是按钮单机自动生成的槽函数

void CtestDllDlg::OnBnClickedOk()

{

WORD reslut = MFCdll_OneWORD_SixWORD(2017,9,7,15,23,0);

if(reslut == 1)

{

AfxMessageBox("软件可正常使用!");

}

else if(reslut == 0)

{

AfxMessageBox("软件已过期!");

}

AfxMessageBox(MFCdll_OneCHAR_OneVOID());

}

5、教程结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这两天搬C++代码到 易语言 上,虽然一路顺风,但是感觉有点乱,比如数据结构之类的,有些的结构复杂,要自己计算偏移量 于是,灵感来了,把C++的结构代码复制到易语言里,然后解析一下,如果调用C++返回的是数据 结构的话,把指针取出来,然后利用本模块便可以模拟加载指针到 动态数据 类型。 步骤:(如果是有指针的) 1、置入相关结构大小() (如果有无法识别的 且不为C++中的指针类型将会默认认为是int,所以先置入,避免结构出错,没有其他结构的就不管) 2、解析类() (把C++中的结构粘过来解析一下,解析完成后将返回xx结构的大小,类似于C++中定义xx类型后,调用sizeof()一样) 3、置xx指针() (把指针置入进去) 4、Get() 就可以愉快的取出值啦,默认可以取出int,string。如果是其他自定义的xx结构,将会返回字节集,如果C++中原本是指针类型的,这里就返回指针 如果是没有指针的,而是我们创建数据 类型传入C++中 1、置入相关结构大小() 同上 2、解析类() 同上 3、创建数据 空间() 就类似于C++中的先new初始化一下空间 4、Set() 设置值啦! 5、取类指针() 取出自定义xx类型结构的指针,然后传入DLL函数中调用C++。 下面是我的实验截图: 1、C++中原本定义的结构: 2、C++调用,然后先取一下结构大小 3、把结构粘贴到易语言中 4、运行一下。 5、至于使用,已经在exosip项目里测试过了,取值没问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值