好友
阅读权限10
听众
最后登录1970-1-1
|
Easy.
发表于 2021-2-24 23:18
吾爱新人第一次发帖!小白文笔技术不好请见谅
话不多说 , 在用C/C++开发的时候 ,有时候自己会图方便想要调用易语言模块的函数,如功能齐全的超级模块等
思路: 创建易语言的动态链接库,引入模块,然后用一个子程序包含模块的子程序,参数|返回值与 模块的子程序相同,然后把参数传入模块的子程序,再用局部变量接受 模块子程序的返回值;
//为了方便就只用 超级模块- 取进程ID 来作为例子
易语言动态链接库导入模块后的代码:
.程序集 程序集1
.子程序 _启动子程序, 整数型,
返回 (0) ' 返回值被忽略。
.子程序 GetProcId, 整数型, 公开
.参数 ProcName, 文本型
.局部变量 return, 整数型
return = 取进程ID (ProcName)
返回 (return)
//把易语言静态编译出的dll放在项目的工程目录下 因为我不知道易语言编译动态链接库怎么生成lib文件,索性直接用显示链接了
C++代码:
#include<stdio.h>
#include<windows.h>
using namespace std;
//经过测试,猜出易语言默认导出函数应该是以 stdcall的函数调用约定导出,使用我们定义个意思上与我们子程序参数返回值相同的函数指针
typedef int(_stdcall *lpGetProcId)(LPCWSTR); //int 对应我们的返回类型 整数型, (LPCWSTR)对应我们的参数 文本型 lpGetProcId是我们顺便定义的函数指针名
int main()
{
//创建接受我们易语言子程序的 函数指针
IpGetProcId MyGetProcId;
//这个是用来接受我们dll 句柄的模块句柄 假设我们易语言编译出的dll 名称是 mydll
HINSTANCE hModule=LoadLibrary((LPCWSTR)" mydll");
//关键了 用我们的函数指针 接受子程序
MyGetProcId=(lpGetProcld)GetProcAddress(hModule,"GetProcId");
//使用易语言模块的函数
int ID=MyGetProcId(" 顺便一个进程名称 ");
printf("ID: %d\n",ID);
system("pause")';
return 0;
}
效果图:
效果图
本帖仅为分享自己所学,若有错误&更好的方法请指出! 勿喷 |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|