易语言使用cdll
1. 易语言调用C语言写的dll问题
你用
__declspec
(dllexport)
来写DLL函数头的话这个DLL只能被C或C++调用
将函数写到
.DEF
文件的话可以让所有编程语言都能调用
2. 易语言可不可以调用c#生成的DLL,怎么搞,注意事项,谢谢
可以调用C#编写的dll,不过要注意以下事项:
1、导出函数应采用标准方式声明,即必须以C风格声明(如:函数加前缀“WINAPI”等修饰)导出函数,易语言只支持标准的C风格导出函数,导出函数声明不正确的话调用时可能出现堆栈错误;
2、导出函数的参数不应包含C#支持但易语言不支持的特性,否则用易语言无法调用;
3、使用了C#编写的dll后,可能需要附带上.net运行时组件,因为不是所有的机器上都有,如果别人的机器上没有,那么你的程序就无法运行了。
3. 易语言怎么调用C写的DLL
去官方论坛问问,那里的人多。
祝你好运
4. 易语言如何调用C语言加载的Dll---请高手指点。
在易语言的左边功能选项找---程序---dl命令--右键---插入新dll命令 DLL命令名=你给他的名称(在窗口程序下可直接代码输入) DLL库文件名=你调用那个DLL命名 DDL库中的对应名=在被调用的DLL的子程序完了后直接在窗口下输入代码(DLL命令名) 打包的时候将DLL放置包下(可减少错误率)
5. C+的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, )
这样我们传递了两个数后就可以返回结果了,如下图:
上图的信息框显示返回的结果是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);
FreeLibrary(hMod);
调用后结果如下图:
这样就得到了正确的结果了,需要注意的是易语言子程序必须公开,公开也就是与VC中def文件导出是一样的道理。
6. 易语言调用C语言的dll堆栈错误!
调用方式是不是一样?易语言里面如果有能设置的话,把函数的调用方式设置成Cdecl或者
C语言方式
之类之类……没用过易语言不知道怎么设。不过多半是这个问题
实在找不到设置的地方的话,C语言代码改改,
int
add(int
a,int
b)
改成
int
__stdcall
add(int
a,int
b)
7. 易语言调用c++的DLL数据类型问题
前三个参数,直接使用“字节集”即可,后两个不确定字节集是否可用,可能需要A2W转换一下再传入,不确定。
8. 易语言调用C语言的dll堆栈错误!
调用方式是不是一样?易语言里面如果有能设置的话,把函数的调用方式设置成Cdecl或者 C语言方式 之类之类……没用过易语言不知道怎么设。不过多半是这个问题
实在找不到设置的地方的话,C语言代码改改,
int add(int a,int b)
改成
int __stdcall add(int a,int b)
9. 易语言怎么调用C写的DLL
C#编写后的代码是基于CLR公共语言运行库上的,是不同于C++输出的传统DLL,所以不能被易语言中调用,你所列的方法是适用于传统VC++输出的DLL,如API
10. 易语言如何调用指定DLL文件
基本说明本文所描述的部分功能需易语言 4.01 或以上版本支持。函数; 函数。 “在易语言中调用 DLL”包含两方面的内容:调用 Windows 系统 API 函数;调用普通 DLL 函数。 易语言中 ”包含两方面的内容: 下文用到的“调用 API”或“调用 DLL”等字眼,除非特别注明,一般都是指以上两方面之一或之和,视 上下文而定。绝大多数情况下,无需明确区分调用的是系统 API 还是普通 DLL。中的导出函数。 目前易语言只支持以 stdcall 方式调用 DLL 中的导出函数。 Windows 系统 API 一般都是以 stdcall 调用方式导出的,故在易语言中调用它们时通常不必考虑函数调用方 式的问题。而普通 DLL 有可能导出“非 stdcall 调用方式” (比如 cdecl)的函数,调用时需要特别注意。一般而 言,考虑到通用性,DLL 开发者都会选择导出以 sdtcall 方式调用的函数。 (支持生成 DLL 的编程语言通常都支 持导出 stdcall 调用方式的函数,具体实现请参考各编程语言手册。 ) 特别地,在 VC 中类似如下代码导出的函数并非 stdcall 调用方式: extern "C" __declspec (dllexport) test(int a, int b) { return (a + b); } 要想该函数被易语言调用,应该按类似如下方式定义(并在.def 文本中声明导出) : int WINAPI test (int a, int b) { return (a + b); }易语言编译生成的 DLL, 其导出函数全部为 stdcall 调用方式, 所以在易语言中调用易语言生成的 DLL 不存 在问题。字节对齐的结构(自定义数据类型) 目前在易语言中调用 DLL 时只支持 1 字节对齐的结构(自定义数据类型) 如果 DLL 命令的某个参数或参数的某个成员是结构类型(自定义数据类型) ,则其对齐方式必须是 1 字节 对齐。Windows 系统 API 中所用到的结构都是 1 字节对齐的,故在调用 API 时不受此限制。但如果想用其它编 程语言生成 DLL 供易语言调用且数据类型中包含了 1 或 2 字节数据长度的成员(如字符型或短整数) ,就需要 考虑结构的 1 字节对齐。 在 VC 中,可以这样定义 1 字节对齐的结构(结构在 C/C++中称为 struct) : #pragma pack (push, old_value) #pragma pack (1) //保存VC++编译器结构对齐字节数。 // 设置为以一字节对齐。struct xxx{ byte a; int b; double c; };#pragma pack (pop, old_value) // 恢复 VC++编译器结构对齐字节数。在 Delphi 中,可以这样定义 1 字节对齐的结构(结构在 Delphi 中称为 record) : type xxx = packed record a: byte; b: integer; c: double; end; 在其它编程语言或编译器中的定义方式请参考各自的编程手册。目前易语言支持调用任意复杂的 目前易语言支持调用任意复杂的 DLL 命令 只要满足了前面的两个条件——调用方式为 stdcall,参数结构为 1 字节对齐——易语言支持调用任意复杂 的 DLL 命令:参数除了可以是基本数据类型或普通结构类型外,还可以是基本类型地址或基本类