c 调用易语言dll字节集,总结VC与易语言DLL互相调用的方法

在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在易语言中如何调用VC编写的DLL呢,首先用VC编写一个简单的DLL文件,代码如下:

int WINAPI add(int x,int y)

{

return x+y;

}

这是一个简单的两个数加法操作,返回两个数相加的结果,这里我生成的是MFC DLL,并且需要在def中导出add函数。

下面用易语言来调用它,首先在易语言中需要插入一个DLL命令,代码如下:

.版本 2

.DLL命令 调用CDLL, 整数型, "cdll.dll", "add"

.参数 x, 整数型

.参数 y, 整数型

并且保存工程文件与DLL文件在一起,否则可能会报找不到DLL的错误.下面在按钮中添加如下代码:

.版本 2

.子程序 _按钮1_被单击

信息框 (调用CDLL (5, 5), 0, )

这样我们传递了两个数后就可以返回结果了,如下图:

VC与易语言DLL互相调用方法

上图的信息框显示返回的结果是10,那么这就是正确的了,易语言调用VC的DLL需要注意类型,并且DLL函数需要WINAPI或stdcall,否则也会报错。

下面我们再来看一下VC如何调用易语言的DLL,还是先用易语言编写一个DLL文件,建立一个DLL动态链接库工程,新建一个子程序,代码如下:

.版本 2

.子程序 add, 整数型, 公开

.参数 x, 整数型

.参数 y, 整数型

返回 (x + y)

下面我们用VC来调用这个DLL并且返回结果,代码如下:

HINSTANCE hMod = LoadLibrary("e.dll");

typedef int(WINAPI *ADD)(int,int);

ADD myadd = (ADD)GetProcAddress(hMod,"add");

CString str;

str.Format("%d",myadd(5,5));

MessageBox(str); 本文内容来自 www.lvcode.com

FreeLibrary(hMod);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在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、付费专栏及课程。

余额充值