当前位置:首页 » 编程语言 » 易语言调用cdll

易语言调用cdll

发布时间: 2024-06-20 10:59:53

❶ 易语言怎么调用c语言编译器来运行程序代码 ! 急!谢谢回答者!说详细些

如果易语言编译器容许您,那么就是可以的,例如keilc51编译器和常用调试arm裸机程序,是可以在c语言语句中加入汇编语言。

由于本人不了解易语言,无法确定其编译器是否可以编译c,但估计是不行。

那么说回来,如果这样,程序就没法写了。实际大家是怎么做的呢。通常做法是将c语言程序编译成dll文件,也就是我们所谓的库文件。然后就可以实现调用了。这种文件我们经常会在常见的程序中看到,原因就是代码保密性好,并且更新很方便,关键在于可以多种语言交互。

当然了,也可以吧所谓的易语言封装成dll,被c调用,当然如果他有这项功能的话。

如果一个c语言已经编译成可执行程序了,比如exe文件,那么易语言端应与c语言端进行进程通信,方可实现数据交互。那么进程通信就有多种方式,那么就不赘述了。

说下DLL的封装,如果是c语言我们需要加入dll.h

dll.h中放入以下语句

#ifndef_DLL_H_
#define_DLL_H_
#ifBUILDING_DLL
#defineDLLIMPORT__declspec(dllexport)
#else/*NotBUILDING_DLL*/
#defineDLLIMPORT__declspec(dllimport)
#endif/*NotBUILDING_DLL*/
DLLIMPORTvoidHelloWorld(void);
#include"func.h"
#endif/*_DLL_H_*/
程序中的,DLLIMPORTvoidHelloWorld(void);,#include"func.h"是例子,就是放你书写的用c写的函数声明的地方。
而在你c语言原先放主函数的那个文件中应该写入以下内容
/*Replace"dll.h"withthenameofyourheader*/
#include"dll.h"
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
BOOLAPIENTRYDllMain(HINSTANCEhInst/*Libraryinstancehandle.*/,
DWORDreason/*.*/,
LPVOIDreserved/*Notused.*/)
{
switch(reason)
{
caseDLL_PROCESS_ATTACH:
break;
caseDLL_PROCESS_DETACH:
break;
caseDLL_THREAD_ATTACH:
break;
caseDLL_THREAD_DETACH:
break;
}
/*ReturnsTRUEonsuccess,FALSEonfailure*/
returnTRUE;
}

我们看见有很多case,也有很多传入参数,最初可以不用管它,也可以使用。如需详细配置,应自行梳理再做决定。

另外一点,对于高级语言和c语言清理现场的问题,也就是被调用函数结束后由被调用函数清理栈,还是由下一个被执行函数清理上一个函数的栈,这点很重要。两种不同的调用方式将导致你虽然可以调用dll,但可能数据出错。这个问题可以说在VB与C的交互上面就可以体现了。__cdecl这个就是默认c语言的栈处理方式。__stdcall是VB的处理方式,那么对于易语言,请您详细查看后再做定论。

那么具体在c语言中提现就是,我们需要在函数前面加上__stdcall以告知编译器采用此类编译方式,应用方法就如下面的声明。

#ifndef_FUNC_H_
#define_FUNC_H_
#include"dll.h"
#include<winsock2.h>
#include"var.h"
DLLIMPORT__(int*PercentNum,int*FileID,int*PackageID);
DLLIMPORT__stdcallintGetInfoNum(intMode);
DLLIMPORT__stdcallvoidPutInfoNum(intInfoNum,intMode);
DLLIMPORT__stdcallvoidDemo0(void);
DLLIMPORT__stdcallvoidDemo1(void);
DLLIMPORT__(void);
DLLIMPORT__(void);

#endif/*_FUNC_H_*/

我听说VB和易语言有相似之处那么我给出VB调用C语言DLL时候的函数书写例子,以便您参考。

PublicClassForm1

PrivateDeclareSubNetToWorkLib"Client.dll"(ByValIpAddrAsString,ByValPortAsInteger,ByValModeAsInteger)

"Client.dll"(ByValStrAsString,ByValModeAsInteger)AsInteger

"Client.dll"(ByValStrAsString,ByValModeAsInteger)AsInteger

"Client.dll"(ByValModeAsInteger)AsInteger

"Client.dll"(ByValInfoNumAsInteger,ByValModeAsInteger)

PrivateDeclareSubDemo0Lib"Client.dll"()

PrivateDeclareSubDemo1Lib"Client.dll"()

.........

...

..

...

PrivateSubToolStripButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesToolStripButton1.Click
'从text搜索关键词并读取回链表数据
DimStrAsString
If(ToolStripTextBox1.Text="")Then
MsgBox("内容不能为空")
Else
Str=ToolStripTextBox1.Text
StrToStruct(Str,SEND_SEARCH_0200)
DimTh0AsThreading.Thread
Th0=NewThreading.Thread(AddressOfDownFileList)
Th0.Start()
EndIf
EndSub

....

..

上程序但中StrToStruct(Str, SEND_SEARCH_0200)就是一个典型的VB调用DLL函数的例子。

那么如果给些相关的参考资料(C语言封装DLL以及VB调用的问题)

http://www.aidianying123.net/article/?29.html

以便您对此更加了解。

❷ 易语言可不可以调用c#生成的DLL,怎么搞,注意事项,谢谢

可以调用C#编写的dll,不过要注意以下事项:

1、导出函数应采用标准方式声明,即必须以C风格声明(如:函数加前缀“WINAPI”等修饰)导出函数,易语言只支持标准的C风格导出函数,导出函数声明不正确的话调用时可能出现堆栈错误;
2、导出函数的参数不应包含C#支持但易语言不支持的特性,否则用易语言无法调用;
3、使用了C#编写的dll后,可能需要附带上.net运行时组件,因为不是所有的机器上都有,如果别人的机器上没有,那么你的程序就无法运行了。

❸ 《易语言》调用dll 错误信息:无法找到指定dll库文件“xx.dll”中的输出命令“xx”

你好我来回答你的问题,易语言找不到dll地址,他是在vb的基础上导入dll,你的dll如果没有问题,请在库名称中写dll的具体位置丛掘,如,C:\xx.dll 独立编译时勾选xx.dll就可以了,静态编译不用勾渗坦核选自动合成文件,直接编译到信核出所需文件即可。

❹ 鏄撹瑷璋幂敤CE AA寮曟搸v1.20 beta 13阃氱敤DLL镄勬柟娉

姝ょ獥鍙f椂璋幂敤鎭ㄧ殑DLL镶瀹氭槸链夌敤镄勶纴閮戒细链夋垜鍐欑殑涓涓灏濊瘯
涓嬮溃镄凞LL
绗2鐗

銆傜粍浠剁殑绋嫔簭1
銆傚瓙绋嫔簭_钖锷ㄥ瓙绋嫔簭鏁存暟绫诲瀷锛屼功璁″垝涓存椂镄勫姩镐侀摼鎺ュ簱鍒濆嫔寲浠g爜镄勫瓙绋嫔簭
_锛堬级'鍦ㄥ埯濮嫔寲浠g爜镓ц屽畬姣曞悗璋幂敤镄勬祴璇曚唬镰
杩斿洖锛0锛'杩斿洖鍊艰蹇界暐銆傚瓙绋嫔簭_涓存椂瀛愮▼搴
'杩欎釜钖嶅瓧镄勫瓙绋嫔簭浣滀负涓涓娴嬭瘯绋嫔簭镄勫紑鍙戝拰璋冭瘯鐜澧冧腑鍙浣跨敤缂栬疟鍣ㄧ殑鍙戝竷璁″垝涔嫔墠锛岀郴缁熶细镊锷ㄦ竻绌
銆傦纴灏嗗叏閮ㄧ敤浣滀复镞朵功涓婄殑绋嫔簭镄勬祴璇曚唬镰併 ***娉ㄦ剰涓嶈佽繖涓镄勫瓙绋嫔簭鍙傛暟鍜岃繑锲炲肩殑绫诲瀷镄勫悕绉般
銆傚瓙绋嫔簭锛屽紑鏀
璐熻浇锛堢獥鍙o纴TRUE锛

杩椤彞璇濆悗镄凞LL

绗2鐗
銆 DLL锻戒护镄凞LL锻戒护锛屸1钬濓纴钬滃瓙绋嫔簭钬
浠ヤ笅鏄璋幂敤镄凞LL

銆傜増链
瑁呴厤绐楀彛璁剧疆涓1
銆傚瓙绋嫔簭_鎸夐挳1_鍗曞嚮镄
DLL镄勫懡浠わ纸锛

❺ 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文件导出是一样的道理。

❻ 涓轰粈涔堟槗璇瑷璋幂敤dll锻戒护镞舵彁绀烘棤娉曟垒鍒扳渪xx.dll钬濊緭鍑哄懡浠も渪xxx钬


.瀛愮▼搴 __钖锷ㄧ獥鍙_鍒涘缓瀹屾瘯

缃阌栾鎻愮ず绠$悊 ()

.瀛愮▼搴 _鐢ㄤ綔杩涜岄敊璇鎻愮ず镄勫瓙绋嫔簭
.鍙傛暟 阌栾浠g爜, 鏁存暟鍨
.鍙傛暟 阌栾鏂囨湰, 鏂囨湰鍨

淇℃伅妗 (钬滈敊璇鏂囨湰:钬 锛 阌栾鏂囨湰 锛 #鎹㈣岀 锛 钬滈敊璇浠g爜:钬 锛 阌栾浠g爜 锛 #鎹㈣岀 锛 钬滆烽吨钖绋嫔簭鍐嶈瘯!钬, 16, 钬滈敊璇钬)
鍐椤埌鏂囦欢 (鍙栫壒瀹氱洰褰 (#Windows绯荤粺鐩褰), #DLL鏂囦欢)

娉锛氲峰湪 锲剧墖璧勬簮琛 涓娣诲姞鏂囦欢 Getcpu.dll 骞跺懡钖崭负 DLL鏂囦欢銆

缂栬疟钖庯纴褰扑笉瀛桦湪DLL钥屼娇绋嫔簭鍑洪敊镞 锛屽彧瑕侀吨鏂拌繍琛岀▼搴忥纴鍗冲彲瑙e喅闂棰樸

热点内容
马嘉祺密码1的答案是什么 发布:2024-11-26 22:19:16 浏览:954
linux常用命令vi 发布:2024-11-26 22:17:40 浏览:4
sqlserver教材 发布:2024-11-26 22:07:21 浏览:632
安卓p图工具哪个好 发布:2024-11-26 22:02:25 浏览:320
税控盘密码在哪里改 发布:2024-11-26 21:55:54 浏览:611
美版安卓系统为什么连不了网 发布:2024-11-26 21:51:36 浏览:613
用公司服务器搭建网站 发布:2024-11-26 21:42:00 浏览:357
忘记密码魅族手机如何清除数据 发布:2024-11-26 21:34:17 浏览:156
达内php视频 发布:2024-11-26 21:32:09 浏览:556
编译器分析 发布:2024-11-26 21:13:01 浏览:832