易語言編譯代碼
① 請教易語言模塊如何編譯成程序
*.e文件是易語言的源代碼文件,該文件中保存了易語言所設計的程序的所有源代碼。無論是*.ec的模塊文件還是*.exe的可執行文件都是通過*.e文件編譯而來的.
如果編譯源代碼文件(也就是*.e的文件)後,生成的是*.ec的文件,那麼說明這份源代碼是一個易語言模塊的源代碼,它只能被編譯為*.ec的易語言模塊文件。
要生成exe的可執行文件,需要在新建易語言程序項目時選擇「Windows窗口程序」類型,該類型的項目可以編譯為exe文件。
另:如何建立「Windows窗口程序」項目?啟動易語言後在彈出的「新建...」窗口中選擇即可。
② 易語言軟體怎麼編譯
在菜單欄上找到編譯》》編譯即可。
編譯(compilation , compile) 1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。 2、用編譯程序產生目標程序的動作。 編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。 編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。
③ 易語言編譯器把易語言代碼編譯成了什麼
最終肯定編譯成機器碼了。
用查殼工具發現易語言生成的PE文件編譯器為VC6.0,個人推斷易語言可能是在VC上架了一層,最終可能仍然是經由VC的編譯器進行編譯,可能是從易語言到C++,到匯編,再到機器碼,僅僅是個人推斷,僅供參考
④ 易語言代碼寫好後用什麼編譯比較好怎麼把支持庫一起寫下去
我覺得用靜態編譯比較好一點,點普通的編譯後會提示你
是否寫出支持庫的文件
如果不寫出的話
只能在裝了易語言的機器上運行
。
⑤ 易語言怎麼調用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
以便您對此更加了解。
⑥ 易語言編譯和靜態編譯的區別
1、庫文件和程序文件不同,編譯是把支持庫文件和程序分開來,如果給別人去用,別人卻沒安裝易語言,就要把支持庫文件帶上給那人才能用。但是靜態編譯是把支持庫文件打包到程序里去.這樣,如果對方沒裝易語言也照樣可以正常使用和獨立編譯。
⑦ 用易語言編譯程序用哪種編譯方式多好
靜態編譯和獨立編譯不一樣嗎?如果按易語言的版本來判斷是靜態編譯比較好,但是我覺得獨立編譯比較穩定。
⑧ 易語言編譯運行到一半提示錯誤代碼1
分割文本 = 分割文本 (到文本 (讀入文件 (取運行目錄 () + 「\text.txt」)), #換行符, ).判斷開始 (取數組成員數 (分割文本) ≥ 6) 文本1 = 分割文本 [1] 文本2 = 分割文本 [2] 文本3 = 分割文本 [3] 文本4 = 分割文本 [4] 文本5 = 分割文本...
⑨ 易語言源代碼問題請教
; 這是易語言鏈接器插件的配置文件,用於設置靜態編譯時使用的外部鏈接器及其參數
;
; 配置項採用 name=value 的形式
; 行首為半形分號,表示該行是注釋
; 欲使某一配置項生效,請刪除該行行首的分號(;)
[linker]
;linker_type=vc6
; linker_type用於指定鏈接器類型。可選值為 vc6, gcc4, elink, alink 等。目前暫不可用。
linker="D:\Program Files\e5.0\vc98linker\Bin\link.exe"
; linker用於指定鏈接器。要求給出完整路徑,路徑兩端可以加上半形雙引號。
; 如果不指定此項,默認會根據linker_type嘗試尋找鏈接器路徑。
;output_file="C:\output.txt"
; output_file用於設置鏈接器輸出重定向到指定的文件。要求給出完整路徑,路徑兩端可以加上半形雙引號。
; 如果不指定此項,默認在易語言IDE的「輸出」面板中輸出。
;extra_args=
; extra_args用於指定附加給鏈接器的額外參數。默認為空。
;show_command_line=yes
; show_command_line用於指定是否在易語言IDE的「輸出」面板中輸出鏈接器的命令行。
; 可以設置為 yes 或 no。默認值為no,即不輸出鏈接器命令行。
;stop_if_too_many_errors=no
; stop_if_too_many_errors用於指定,如果靜態鏈接過程中出現過多錯誤信息(大約 30 條)時,是否允許中止鏈接。
; 可以設置為 yes 或 no。默認值為yes,即,如果鏈接錯誤過多,會彈出信息框詢問用戶是否中止鏈接。
;retain_intermediate_files=yes
; retain_intermediate_files用於設置是否保留鏈接期間生成的中間文件(比如 obj,res,lib 等文件)。
; 可以設置為 yes 或 no。默認值為no,即不保留中間文件。
這是我的INI,換掉試試
⑩ 易語言編譯exe調用dll代碼
易語言有一個可以添加DLL命令的地方,只要你的命令介面沒有變,裡面的函數隨你改
修改窗口屬性也一樣,將你的窗口句柄傳過去,根據句柄該窗口組件屬性的方法就很多了,
如果你的DLL也是使用易語言寫的話那就更簡單了,
直接定義一個變數類型為窗口
.版本 2
.子程序 ABC, , 公開
.參數 要修改的窗口, 窗口
要修改的窗口.左邊 = 0
要修改的窗口.高度 = 500