c语言调易语言dll,易语言DLL来返回文本供其他语言调用

本文介绍了如何在易语言中创建DLL以返回文本型值,并确保其他语言能正确读取。主要方法包括通过内存操作,先在易语言中分配内存存储文本,然后DLL返回内存指针,其他语言读取该指针内容;或者预先在调用方分配内存,传入DLL进行操作。两种方法都涉及到内存管理和指针操作,确保跨语言数据交换的正确性。
摘要由CSDN通过智能技术生成

部分简介

在使用易语言与其他语言配合编程中,有时需要使用易语言的DLL来返回文本型的值,但是由于易语言本身文本型数据不能直接返回让其他语言使用(直接使用多次会崩溃).所以这里要使用一种转换的方式,是其他语言调用易语言的文本返回参数.

一.方法.

原理说明:

使用了内存的操作, 在易语言当中,申请一块足够的内存(例程中为1024字节),然后将要返回的文本写到该内存中,然后DLL返回一个内存指针.再在其他语言中读取该指针.

调用伪代码:

DLL命令 Test1

int adress= Test1();//执行DLL命令,使其返回一个内存指针

char* pCh=new char[1024];//这里的数据类型为字节型,占用1个字节,值0-255 同易语言中的字节.

这里是申请一块字节型内存,内存大小为1024,然后用这块内存来存放DLL返回指针所指向的文本.

注意:如果没有申请内存,那么可以直接使用一个”字节型”的数组.

RtlMoveMemory(pCh,adress,1024);//将指针指向的内容,复制到我们的变量中.

BOOL bRet= VirtualFree((LPVOID)Ret,0,MEM_RELEASE);//最后是清理内存操作.

二.第二种方法

原理说明:

在程序中申请一块内存,把内存的地址传递给DLL,易语言直接对这块内存进行操作.

调用伪代码:

DLL命令 Test2

char* pCh=new char[1024];//这回是自己申请一块字节型内存.

ZeroMemory(pCh,1024);//清空内存.

int Addr=(int)(pCh);//获取自己申请内存的地址.

(*Test2)(Addr);//调用DLL命令

调用过后,pCh中既是DLL的返回文本.

相关阅读

最近更新

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

余额充值