吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3307|回复: 1
收起左侧

[C&C++ 转载] 条条大路通罗马-在C/C++里调用易语言的模块

[复制链接]
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;
}

效果图:

效果图

效果图


本帖仅为分享自己所学,若有错误&更好的方法请指出! 勿喷

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
198738655 + 1 + 1 我很赞同!
成熟的美羊羊 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

潋天堂 发表于 2021-2-25 08:14
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 19:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表