動態(tài)調(diào)用DLL里的函數(shù)-160921

動態(tài)調(diào)用DLL里的函數(shù)-160921

ID:41393859

大小:70.66 KB

頁數(shù):7頁

時間:2019-08-24

動態(tài)調(diào)用DLL里的函數(shù)-160921_第1頁
動態(tài)調(diào)用DLL里的函數(shù)-160921_第2頁
動態(tài)調(diào)用DLL里的函數(shù)-160921_第3頁
動態(tài)調(diào)用DLL里的函數(shù)-160921_第4頁
動態(tài)調(diào)用DLL里的函數(shù)-160921_第5頁
資源描述:

《動態(tài)調(diào)用DLL里的函數(shù)-160921》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、動態(tài)調(diào)用DLL里的函數(shù)Hanford2016年09月21日目錄第1章說明2第1章說明最近發(fā)現(xiàn)了一個COM組件DynamicWrapperX,有了它就可以在vbs、js里方便、快捷的訪問WindowsAPI了。卜?面是一段vbs代碼:SetWrap=CreateObjectC'DynamicWrapper")Wrap.RegisteLKERNEL32.DLL”,nCopyFileAn,,,i=ssF,,,,R=r,Wrap.CopyFileA(”c:l?txt”,“c:2.txt”,1)第一行代碼創(chuàng)建了一個COM對象,其ProgID為“DynamicWrapper”

2、;第二行代碼載入動態(tài)庫KERNEL32.DLL,然后找到函數(shù)CopyFileA的地址;第三行調(diào)用函數(shù)CopyFileA(”c:l.txt”,”c:2.txt”,l),將文件c:l.txt復(fù)制到c:2.txto這里,難度最大的就是第三行代碼。在VC++程序員的角度來看就是有了如下變量:1、CopyFileA的函數(shù)指針FARPROCpFunc;2、傳遞給CopyFileA函數(shù)的參數(shù)數(shù)組VARIANT*。注意:vbs會把三個參數(shù)”c:l.txt”,”c:2.txt”,l變成三個VARIANT,然后從右至左放到一個數(shù)組里,最后把數(shù)組首地址傳給COM對象。現(xiàn)在,如何

3、調(diào)用CopyFileA函數(shù)?下面是模擬DynamicWrapper的VC++代碼:#include#include#pragmawarning(disable:4786)#include#include/■A%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£

4、#%£#%£#%£#%£#%£#%£#%£#%£#函數(shù)指針參數(shù)數(shù)組首地址。參數(shù)的順序是從左至右參數(shù)個數(shù)調(diào)用約定:非零表示—stdcall,0表示—cdecl/?丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫??丫?pFunc[in]varParam[in]nP

5、aramCount[in]bCdecl

6、in

7、函數(shù)調(diào)用longCallFunc(FARPROCpFunc,VARIANT*varParam,intnParamCount,intbCdecl=0){longnRet=0;if(pFunc){inti二nParamCount;longnParam=0;while(—i>=0){〃參數(shù)從右至左壓入堆棧nParam=varParam[i]」Vai;—asm{pushnParam—asm{〃調(diào)用函數(shù),將返冋值賦給變量nRetcallpFuncmovnRet,eax}if(bCdecl){〃如果調(diào)用約定是_cdecl,需要對寄存器

8、ESP進(jìn)行處理nParamCount?=2;//一個參數(shù)占用4字節(jié)asmaddesp,nParamCountreturnnRet;}classCDynamicWrapper{public:?CDynamicWrapper(){for(std::map::iteratorit=m_mapFunc.begin();it!=m_mapFunc.end();++it){〃卸載DLLFreeLibrary(it->second.m_hMod);}}public:voidRegister(LPCTSTRszDUName,constchar*s

9、zFuncName,intbCdecl=0)if(szDHName&&szDllName[O]){〃注冊if(szFuncName&&szFuncName[O]&&m_mapFunc.find(szFuncName)==m_mapFunc.end()){HMODULEhMod=LoadLibrary(szDllName);if(hMod){FARPROCpFunc二GetProcAddress(hMod,szFuncName);if(pFunc){//找到函數(shù),放入m_mapFuncCFunct;t.m_hMod=hMod;t.m_pFunc=pFu

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。