动态调用DLL里的函数-160921

动态调用DLL里的函数-160921

ID:41393859

大小:70.66 KB

页数:7页

时间:2019-08-24

动态调用DLL里的函数-160921_第1页
动态调用DLL里的函数-160921_第2页
动态调用DLL里的函数-160921_第3页
动态调用DLL里的函数-160921_第4页
动态调用DLL里的函数-160921_第5页
资源描述:

《动态调用DLL里的函数-160921》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、动态调用DLL里的函数Hanford2016年09月21日目录第1章说明2第1章说明最近发现了一个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)第一行代码创建了一个COM对象,其ProgID为“DynamicWrapper”

2、;第二行代码载入动态库KERNEL32.DLL,然后找到函数CopyFileA的地址;第三行调用函数CopyFileA(”c:l.txt”,”c:2.txt”,l),将文件c:l.txt复制到c:2.txto这里,难度最大的就是第三行代码。在VC++程序员的角度来看就是有了如下变量:1、CopyFileA的函数指针FARPROCpFunc;2、传递给CopyFileA函数的参数数组VARIANT*。注意:vbs会把三个参数”c:l.txt”,”c:2.txt”,l变成三个VARIANT,然后从右至左放到一个数组里,最后把数组首地址传给COM对象。现在,如何

3、调用CopyFileA函数?下面是模拟DynamicWrapper的VC++代码:#include#include#pragmawarning(disable:4786)#include#include/■A%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£#%£

4、#%£#%£#%£#%£#%£#%£#%£#%£#函数指针参数数组首地址。参数的顺序是从左至右参数个数调用约定:非零表示—stdcall,0表示—cdecl/・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・・丫・pFunc[in]varParam[in]nP

5、aramCount[in]bCdecl

6、in

7、函数调用longCallFunc(FARPROCpFunc,VARIANT*varParam,intnParamCount,intbCdecl=0){longnRet=0;if(pFunc){inti二nParamCount;longnParam=0;while(—i>=0){〃参数从右至左压入堆栈nParam=varParam[i]」Vai;—asm{pushnParam—asm{〃调用函数,将返冋值赋给变量nRetcallpFuncmovnRet,eax}if(bCdecl){〃如果调用约定是_cdecl,需要对寄存器

8、ESP进行处理nParamCount«=2;//一个参数占用4字节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){//找到函数,放入m_mapFuncCFunct;t.m_hMod=hMod;t.m_pFunc=pFu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。