c 调用易语言dll clr报错,易语言注入dll调用函数的方法

在我们的生活中那,如何操作上述标题的小问题,小编今天就在这里给大家分享一点我的小经验,来增加我们的体验,希望可以给你们带来帮助。

1、首先这不是注入DLL,这是导入DLL函数进PE文件,这个过程需要一个工具LordPE,网上都有可以自己去下载。

0a15ec38f67331d38c8de901c2446b22.png

2我们知道一旦DLL函数被导入EXE文件的输入表,则EXE文件启动时会自动执行一遍该DLL的_启动子程序 函数,

73d3369b2bd988c085d61dc156dbba65.png

3、所以我们可以把需要执行的指令放在该函数里面,然后记得在该函数的 公开 选项打上勾,然后编译。

181debee832368e6c8a251183cad1eef.png

4、接下来,我们打开LordPE,如下图

然后在弹出的对话框中选择要导入DLL函数的程序然后点击新弹出的窗口的目录,如下图

ff630780d718efaa55ff638127999d6c.png

5、然后点 输入表 右边的 标题是 ...的按钮(截不了图了)

然后随便选择一项数据,右键,如下图

在弹出的窗口中填写DLL名,及API名(填_启动子程序)就可以了,然后点一下 + 按钮

594585382b211a8488f63fcdde6a00db.png

6、如果弹出一个信息框,点 是 就可以,添加完成之后点 确定 ,然后一路保存就可以了,不过发布程序的时候记得带上那个DLL

0765cc67d52037f52d4c6dd1110a7eb9.png

在C语言中调用易语言编写的DLL,需要注意以下几点: 1.易语言中的函数必须使用stdcall方式导出,而不是C语言常用的cdecl方式。 2.易语言中的函数名可能会被编译器修改,需要使用工具查看真实的函数名。 3.在C语言中使用LoadLibrary函数加载DLL,使用GetProcAddress函数获取函数地址,然后可以直接调用。 下面是一个简单的例子: 假设我们有一个由易语言编写的DLL,其中有一个函数Add,功能是将两个整数相加并返回结果。 首先,我们需要在易语言中将这个函数导出为stdcall方式,代码如下: ``` Function Add Alias "_Add@8"(a As Long, b As Long) Export As Long Return a + b End Function ``` 注意,函数名被编译器修改为"_Add@8"。 接下来,在C语言中调用这个DLL,代码如下: ``` #include <windows.h> #include <stdio.h> typedef int (*AddFunc)(int, int); int main() { HMODULE dll = LoadLibrary("test.dll"); if (dll == NULL) { printf("Load DLL failed!\n"); return 0; } AddFunc add = (AddFunc)GetProcAddress(dll, "_Add@8"); if (add == NULL) { printf("Get function address failed!\n"); return 0; } int result = add(1, 2); printf("Result: %d\n", result); FreeLibrary(dll); return 0; } ``` 我们首先使用LoadLibrary函数加载DLL,然后使用GetProcAddress函数获取函数地址,注意函数名需要加上前缀"_"和后缀"@8"。最后,我们就可以直接调用这个函数了。 注意,在使用完DLL后,需要使用FreeLibrary函数释放DLL的句柄,否则会导致内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值