九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
[原創(chuàng)]VC++調(diào)用易編DLL的方法(靜態(tài)庫導(dǎo)入)|易語言俱樂部

這里說的不是用LoadLibrary動(dòng)態(tài)載入,雖然VC++用動(dòng)態(tài)調(diào)用其實(shí)很容易,但很多VC++程序員很不習(xí)慣這種做法,因?yàn)橐约汗芾鞤LL的載入和釋放,有的甚至不懂怎么動(dòng)態(tài)調(diào)用DLL,已經(jīng)依賴有H文件聲明和導(dǎo)入靜態(tài)庫(LIB)方式。


所以一直以來困擾很多人,總是聽到有人問,VC++怎么調(diào)用易的DLL?!


 


今天,我就來介紹這種在VC++常規(guī)的方法來調(diào)用易DLL。首先,我們需要一個(gè)小工具,這個(gè)工具是本人編寫的,就是專門生成VC++需要的DLL導(dǎo)入函數(shù)庫,當(dāng)然不是把易的DLL轉(zhuǎn)成靜態(tài)庫,靜態(tài)庫也分幾種,一種就是我們需要的,包含有DLL函數(shù)信息的庫,C++調(diào)用DLL需要這個(gè)。我這個(gè)工具就是生成這種庫的。


 


 

mY6DezBh.rar (219 K) 下載次數(shù):565


 


下載工具以后,分兩步驟,第一步從DLL中導(dǎo)出函數(shù)的名稱說明文件*.Def,以“VCode.dll”為例,它生成的VCode.def文件是這樣的:


 


LIBRARY Vcode.dll


EXPORTS
DeError   @1
DeInfo   @2
GetByteVcode  @3
GetFileVcode  @4
GetRecNum  @5
GetUrlVcode  @6
GetWebVcode  @7
LoadDe   @8


 


 


LIBRARY 易編的DLL名稱,這個(gè)名稱不能亂改的,要對(duì)應(yīng)實(shí)際文件名,相當(dāng)于LoadLibrary()的參數(shù),改了程序就啟動(dòng)不了,而且提示框也是系統(tǒng)的,這和動(dòng)調(diào)用DLL不同。


EXPORTS 后面跟著的就是DLL的所有導(dǎo)出函數(shù)名稱,名稱后面的由空格隔開的@XX數(shù)字是函數(shù)的序號(hào),這也是不能改動(dòng)的。


 


那么能改的是什么?只有函數(shù)名了。為什么要改函數(shù)名?


因?yàn)閂C++對(duì)于C語言風(fēng)格(extern "C" )的導(dǎo)入函數(shù)都是要上 _函數(shù)名@N 這種式樣的修飾符,不然編譯不了。易編寫的DLL函數(shù)是不能編寫這種名稱的,所以在這里要自己動(dòng)手修改,@N 的N是用數(shù)字表示(注意,和上面的@意義不同)這里@數(shù)字是表示函數(shù)的參數(shù)總字節(jié)數(shù)之和,即調(diào)用棧大小。就是由參數(shù)個(gè)數(shù)和類型決實(shí)的,通常是 參數(shù)個(gè)數(shù) × 4 ,如果參數(shù)有日期型或長整數(shù)型或雙精度小數(shù)型(非傳址,即參考指針型),每有一個(gè)參數(shù)這些類型的就要再加4,因?yàn)檫@些類型是8字節(jié)的,相當(dāng)于其它類型的兩個(gè)參數(shù),實(shí)際編譯也是分兩段兩次入?yún)?shù)棧道的。


 


如果不會(huì)計(jì)算,那就更簡單了,直接開始第二步驟,先別修改了,把剛才的*.Def編譯成LIB靜態(tài)庫。


 


最后就是寫C++需要的*.h文件了,上面有關(guān)于易DLL導(dǎo)出函數(shù)的聲明,接著上例:


 


//導(dǎo)入函數(shù)表靜態(tài)庫文件(剛才我們編譯出來的Vcode.LIB)
#pragma comment(lib, "Vcode.lib")


extern "C" //其它語言編譯的DLL要用C風(fēng)格
{
//DLL函數(shù)
 int _stdcall LoadDe(char* strFilePath,char* strFilePath2);
 ....
}


 


然后編譯VC++工程,是調(diào)用易DLL的,肯定會(huì)出錯(cuò),你看看找不到函數(shù)了吧:


 


Linking...
VcodeDemoDlg.obj : error LNK2001: unresolved external symbol _DeInfo@4
VcodeDemoDlg.obj : error LNK2001: unresolved external symbol _DeError@4
VcodeDemoDlg.obj : error LNK2001: unresolved external symbol _LoadDe@8
VcodeDemoDlg.obj : error LNK2001: unresolved external symbol _GetUrlVcode@12
VcodeDemoDlg.obj : error LNK2001: unresolved external symbol _GetWebVcode@16
VcodeDemoDlg.obj : error LNK2001: unresolved external symbol _GetFileVcode@12
VcodeDemoDlg.obj : error LNK2001: unresolved external symbol _GetByteVcode@16


 


 


不過它也把要求的函數(shù)名列出來了,不用自己計(jì)算了,把這些@數(shù)字加到相應(yīng)的函數(shù)后面,修改DEF文件,如下:


 


LIBRARY Vcode.dll


EXPORTS
DeError@4                   @1
DeInfo@4                    @2
GetByteVcode@16        @3
GetFileVcode@12          @4
GetRecNum@16            @5
GetUrlVcode@12           @6
GetWebVcode@16         @7
LoadDe@8                    @8


 




這里有兩個(gè)@也是跟數(shù)字,注意不要改錯(cuò)了,是改緊跟著函數(shù)名的。改好后重新編譯LIB,再次構(gòu)建VC++工程,這次全部通過了。


你把H文件,LIB文件和DLL文件三個(gè)文件拿給喜歡偷懶的VC++程序員,這次易和C++的合作就算圓滿完成了。[em01]



[此貼子已經(jīng)被作者于2009-3-16 2:49:48編輯過]
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
vc++6.0 編譯JRTPLIB
在Windows環(huán)境下的使用pthreads
error LNK2001;fatal error C1189等的解決辦法
VC6的LNK2005錯(cuò)誤
VC++ 連接錯(cuò)誤
如何在VC++6.0或者VS如VS2010下使用外部類庫(其他頭文件)比如用pthread.h這個(gè)頭文件
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服