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

由于本人不了解易语言,无法确定其编译器是否可以编译c,但估计是不行。那么说回来,如果这样,程序就没法写了。实际大家是怎么做的呢。通常做法是将c语言程序编译成dll文件,也就是我们所谓的库文件。然后就可以实现调用了。这种文件我们经常会在常见的程序中看到,原因就是代码保密性好,并且更新很方便...
易语言怎么调用c语言编译器来运行程序代码 ! 急!谢谢回答者!说详细些
  如果易语言编译器容许您,那么就是可以的,例如keilc51编译器和常用调试arm裸机程序,是可以在c语言语句中加入汇编语言。
  由于本人不了解易语言,无法确定其编译器是否可以编译c,但估计是不行。

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

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

  说下DLL的封装,如果是c语言我们需要加入dll.h
dll.h中放入以下语句
#ifndef _DLL_H_#define _DLL_H_#if BUILDING_DLL# define DLLIMPORT __declspec (dllexport)#else /* Not BUILDING_DLL */# define DLLIMPORT __declspec (dllimport)#endif /* Not BUILDING_DLL */DLLIMPORT void HelloWorld (void);#include "func.h"#endif /* _DLL_H_ */程序中的,DLLIMPORT void HelloWorld (void);,#include "func.h"是例子,就是放你书写的用c写的函数声明的地方。而在你c语言原先放主函数的那个文件中应该写入以下内容/* Replace "dll.h" with the name of your header */#include "dll.h"#include <windows.h>#include <stdio.h>#include <stdlib.h>BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ){ switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE;}  我们看见有很多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 __stdcall void GetProgressNumFileIDPackageID(int *PercentNum,int *FileID,int *PackageID);DLLIMPORT __stdcall int GetInfoNum(int Mode);DLLIMPORT __stdcall void PutInfoNum(int InfoNum,int Mode);DLLIMPORT __stdcall void Demo0(void);DLLIMPORT __stdcall void Demo1(void);DLLIMPORT __stdcall void InitThreadCriticalSection(void);DLLIMPORT __stdcall void DeleteThreadCriticalSection(void);#endif /*_FUNC_H_*/
我听说VB和易语言有相似之处那么我给出VB调用C语言DLL时候的函数书写例子,以便您参考。
Public Class Form1 Private Declare Sub NetToWork Lib "Client.dll" (ByVal IpAddr As String, ByVal Port As Integer, ByVal Mode As Integer) Private Declare Function StrToStruct Lib "Client.dll" (ByVal Str As String, ByVal Mode As Integer) As Integer Private Declare Function StructToStr Lib "Client.dll" (ByVal Str As String, ByVal Mode As Integer) As Integer Private Declare Function GetInfoNum Lib "Client.dll" (ByVal Mode As Integer) As Integer Private Declare Sub PutInfoNum Lib "Client.dll" (ByVal InfoNum As Integer, ByVal Mode As Integer) Private Declare Sub Demo0 Lib "Client.dll" () Private Declare Sub Demo1 Lib "Client.dll" ().........
...
..

...
Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click '从text搜索关键词 并读取回链表数据 Dim Str As String If (ToolStripTextBox1.Text = "") Then MsgBox("内容不能为空") Else Str = ToolStripTextBox1.Text StrToStruct(Str, SEND_SEARCH_0200) Dim Th0 As Threading.Thread Th0 = New Threading.Thread(AddressOf DownFileList) Th0.Start() End If End Sub....
..
上程序但中StrToStruct(Str, SEND_SEARCH_0200)就是一个典型的VB调用DLL函数的例子。

  那么如果给些相关的参考资料(C语言封装DLL以及VB调用的问题)
   http://www.aidianying123.net/article/?29.html
  以便您对此更加了解。
2013-08-25
代码不一样 不可以
就好比你用水杯炒菜
不是一个系统的2013-08-24
mengvlog 阅读 7 次 更新于 2025-07-18 16:19:23 我来答关注问题0
  •  shiji2486 易语言怎么调用外部软件运行且自动输入账号密码并且点击确定

    1、用精易编程助手“窗口探测”取句柄。移动探标到编辑框,然后点“其他”---“生成易代码”--“生成”--“复制”,到易语言窗口程序集1粘贴,然后改一下“子程序名”的名字,因为待会要取其他的编辑框按钮什么的,名字会重复。2、易语言输入 看源码吧 3、继续取其他编辑框什么的句柄,重复一二步...

  •  翡希信息咨询 用易语言写的程序怎么运行在指定的目录下

    要让用易语言编写的程序在指定目录下运行,可以采取以下方法:在程序内部设置工作目录:使用易语言提供的“设置当前目录”命令来指定程序的工作目录。这样,程序在读写文件时会默认在这个指定的目录下进行操作。通过命令行参数指定工作目录:在启动程序前,通过命令行使用“cd”命令改变当前目录到指定的目录,...

  •  染尘 易语言怎么运行指定程序

    要运行易语言指定的程序,你可以通过将程序打包成压缩包,然后使用运行命令来执行。具体步骤如下:首先,确保你的程序文件(如"ABCD.exe")已经正确放置在运行目录中。运行命令的格式是运行(运行目录路径+"文件名",忽略错误,空参数)。例如,如果你的程序文件在当前目录下,命令可能是:运行(".\ABCD....

  •  翡希信息咨询 易语言的调用外部exe问题

    使用运行函数:在易语言中,调用外部exe文件需要使用“运行”函数。执行语句的格式为:“运行”。其中,“文件路径”是待执行的外部exe文件的完整路径。设置参数:在“运行”函数中,除了文件路径外,还可以设置其他参数来控制函数的行为。例如,“运行”中的“假”参数用于控制某些函数的行为,具体含义需根...

  •  海南加宸 易语言的怎么脱离支持库?

    易语言提供了三种编译方式,以供开发者选择。第一种是普通的编译方式,这种方式编译出的文件体积较小,但需要附带支持库。若未安装易语言或支持库未打包,文件将无法运行,并会提示缺少支持库。目前,这种编译方式在实际应用中已较少使用。第二种是独立编译。与普通的编译方式不同,独立编译会将所需的...

檬味博客在线解答立即免费咨询

代码相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部