免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

易語(yǔ)言調(diào)用c函數(shù) 易語(yǔ)言調(diào)用lib

易語(yǔ)言如何調(diào)用C語(yǔ)言加載的Dll?---請(qǐng)高手指點(diǎn)。

在易語(yǔ)言的左邊功能選項(xiàng)找---程序---dl命令--右鍵---插入新dll命令 DLL命令名=你給他的名稱(在窗口程序下可直接代碼輸入) DLL庫(kù)文件名=你調(diào)用那個(gè)DLL命名 DDL庫(kù)中的對(duì)應(yīng)名=在被調(diào)用的DLL的子程序完了后直接在窗口下輸入代碼(DLL命令名) 打包的時(shí)候?qū)LL放置包下(可減少錯(cuò)誤率)

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括榕江網(wǎng)站建設(shè)、榕江網(wǎng)站制作、榕江網(wǎng)頁(yè)制作以及榕江網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,榕江網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到榕江省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

易語(yǔ)言怎么調(diào)用c語(yǔ)言編譯器來運(yùn)行程序代碼 ! 急!謝謝回答者!說詳細(xì)些

如果易語(yǔ)言編譯器容許您,那么就是可以的,例如keilc51編譯器和常用調(diào)試arm裸機(jī)程序,是可以在c語(yǔ)言語(yǔ)句中加入?yún)R編語(yǔ)言。

由于本人不了解易語(yǔ)言,無法確定其編譯器是否可以編譯c,但估計(jì)是不行。

那么說回來,如果這樣,程序就沒法寫了。實(shí)際大家是怎么做的呢。通常做法是將c語(yǔ)言程序編譯成dll文件,也就是我們所謂的庫(kù)文件。然后就可以實(shí)現(xiàn)調(diào)用了。這種文件我們經(jīng)常會(huì)在常見的程序中看到,原因就是代碼保密性好,并且更新很方便,關(guān)鍵在于可以多種語(yǔ)言交互。

當(dāng)然了,也可以吧所謂的易語(yǔ)言封裝成dll,被c調(diào)用,當(dāng)然如果他有這項(xiàng)功能的話。

如果一個(gè)c語(yǔ)言已經(jīng)編譯成可執(zhí)行程序了,比如exe文件,那么易語(yǔ)言端應(yīng)與c語(yǔ)言端進(jìn)行進(jìn)程通信,方可實(shí)現(xiàn)數(shù)據(jù)交互。那么進(jìn)程通信就有多種方式,那么就不贅述了。

說下DLL的封裝,如果是c語(yǔ)言我們需要加入dll.h

dll.h中放入以下語(yǔ)句

#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寫的函數(shù)聲明的地方。

而在你c語(yǔ)言原先放主函數(shù)的那個(gè)文件中應(yīng)該寫入以下內(nèi)容

/*?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,也有很多傳入?yún)?shù),最初可以不用管它,也可以使用。如需詳細(xì)配置,應(yīng)自行梳理再做決定。

另外一點(diǎn),對(duì)于高級(jí)語(yǔ)言和c語(yǔ)言清理現(xiàn)場(chǎng)的問題,也就是被調(diào)用函數(shù)結(jié)束后由被調(diào)用函數(shù)清理?xiàng)#€是由下一個(gè)被執(zhí)行函數(shù)清理上一個(gè)函數(shù)的棧,這點(diǎn)很重要。兩種不同的調(diào)用方式將導(dǎo)致你雖然可以調(diào)用dll,但可能數(shù)據(jù)出錯(cuò)。這個(gè)問題可以說在VB與C的交互上面就可以體現(xiàn)了。__cdecl這個(gè)就是默認(rèn)c語(yǔ)言的棧處理方式。__stdcall是VB的處理方式,那么對(duì)于易語(yǔ)言,請(qǐng)您詳細(xì)查看后再做定論。

那么具體在c語(yǔ)言中提現(xiàn)就是,我們需要在函數(shù)前面加上__stdcall以告知編譯器采用此類編譯方式,應(yīng)用方法就如下面的聲明。

#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和易語(yǔ)言有相似之處那么我給出VB調(diào)用C語(yǔ)言DLL時(shí)候的函數(shù)書寫例子,以便您參考。

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搜索關(guān)鍵詞?并讀取回鏈表數(shù)據(jù)?

Dim?Str?As?String

If?(ToolStripTextBox1.Text?=?"")?Then

MsgBox("內(nèi)容不能為空")

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)就是一個(gè)典型的VB調(diào)用DLL函數(shù)的例子。

那么如果給些相關(guān)的參考資料(C語(yǔ)言封裝DLL以及VB調(diào)用的問題)

以便您對(duì)此更加了解。

易語(yǔ)言調(diào)用C語(yǔ)言的dll堆棧錯(cuò)誤!

調(diào)用方式是不是一樣?易語(yǔ)言里面如果有能設(shè)置的話,把函數(shù)的調(diào)用方式設(shè)置成Cdecl或者

C語(yǔ)言方式

之類之類……沒用過易語(yǔ)言不知道怎么設(shè)。不過多半是這個(gè)問題

實(shí)在找不到設(shè)置的地方的話,C語(yǔ)言代碼改改,

int

add(int

a,int

b)

改成

int

__stdcall

add(int

a,int

b)

C+的dll如何用易語(yǔ)言正確調(diào)用?

在編寫程序的時(shí)候往往需要調(diào)用到別的語(yǔ)言編寫的DLL文件,下面先來看一下在易語(yǔ)言中如何調(diào)用VC編寫的DLL呢,首先用VC編寫一個(gè)簡(jiǎn)單的DLL文件,代碼如下:

int WINAPI add(int x,int y)

{

return x+y;

}

這是一個(gè)簡(jiǎn)單的兩個(gè)數(shù)加法操作,返回兩個(gè)數(shù)相加的結(jié)果,這里我生成的是MFC DLL,并且需要在def中導(dǎo)出add函數(shù)。

下面用易語(yǔ)言來調(diào)用它,首先在易語(yǔ)言中需要插入一個(gè)DLL命令,代碼如下:

.版本 2

.DLL命令 調(diào)用CDLL, 整數(shù)型, "cdll.dll", "add"

.參數(shù) x, 整數(shù)型

.參數(shù) y, 整數(shù)型

并且保存工程文件與DLL文件在一起,否則可能會(huì)報(bào)找不到DLL的錯(cuò)誤.下面在按鈕中添加如下代碼:

.版本 2

.子程序 _按鈕1_被單擊

信息框 (調(diào)用CDLL (5, 5), 0, )

這樣我們傳遞了兩個(gè)數(shù)后就可以返回結(jié)果了,如下圖:

上圖的信息框顯示返回的結(jié)果是10,那么這就是正確的了,易語(yǔ)言調(diào)用VC的DLL需要注意類型,并且DLL函數(shù)需要WINAPI或stdcall,否則也會(huì)報(bào)錯(cuò)。

下面我們?cè)賮砜匆幌耉C如何調(diào)用易語(yǔ)言的DLL,還是先用易語(yǔ)言編寫一個(gè)DLL文件,建立一個(gè)DLL動(dòng)態(tài)鏈接庫(kù)工程,新建一個(gè)子程序,代碼如下:

.版本 2

.子程序 add, 整數(shù)型, 公開

.參數(shù) x, 整數(shù)型

.參數(shù) y, 整數(shù)型

返回 (x + y)

下面我們用VC來調(diào)用這個(gè)DLL并且返回結(jié)果,代碼如下:

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);

調(diào)用后結(jié)果如下圖:

這樣就得到了正確的結(jié)果了,需要注意的是易語(yǔ)言子程序必須公開,公開也就是與VC中def文件導(dǎo)出是一樣的道理。

網(wǎng)站題目:易語(yǔ)言調(diào)用c函數(shù) 易語(yǔ)言調(diào)用lib
本文路徑:http://m.newbst.com/article46/dddojhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃網(wǎng)頁(yè)設(shè)計(jì)公司網(wǎng)站設(shè)計(jì)公司網(wǎng)站排名響應(yīng)式網(wǎng)站網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)