1、準(zhǔn)備好要看函數(shù)的dell文件,打開Dll函數(shù)查看器3.5。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了河北免費建站歡迎大家使用!
2、單擊“選擇文件”按鈕,選擇你的文件。
3、點擊豎早枝“打開”按鈕。你會發(fā)睜旁現(xiàn)余敏,這個查看器列出了很多函數(shù)。
4、選擇你的函數(shù),如“SetMessageA”,然后點擊左邊的“+”,你就能看到這個函數(shù)的參數(shù)。
5、如果想在VB或易語言中聲明這個函數(shù),不需輸入,可以這樣:選擇函數(shù),右鍵單擊,你就會發(fā)現(xiàn)有兩個菜單,一個是“復(fù)制到VB聲明”,一個是“復(fù)制到易語言聲明”!
//建立一個vc6.0中建立一個win32console工程,打入如下代碼。我在我的電腦上測試通過了。
#include "手洞stdafx.h"
#include windows.h
#include winbase.h
#include stdio.h
#include tchar.h
#include imagehlp.h
typedef PVOID (CALLBACK* PFNEXPORTFUNC)(PIMAGE_NT_HEADERS,PVOID,ULONG,PIMAGE_SECTION_HEADER*);
void printAllFuncName(char* fileName);//打印所有函數(shù)名稱的函數(shù)聲明
int main(int argc, char* argv[])
{
printAllFuncName("F:\\gdi32.dll");//打印gdi32.dll中所有函數(shù)名稱,要打印別的dll中的函數(shù),只要改變這個字符串。
getchar();
return 0;
}
void printAllFuncName(char* fileName){
LPWIN32_FIND_DATA lpwfd_first=new WIN32_FIND_DATA;/畢磨枯/接受findfirstfile的結(jié)構(gòu)指針
HANDLE hFile,hFileMap;//文件句柄和內(nèi)存映射文件句柄
DWORD fileAttrib=0;//存儲文件屬性用,在createfile中用到。
void* mod_base;//內(nèi)存映射文件的起始地址,也是模塊的起始地址
//首先取得ImageRvaToVa函數(shù)本來只要#include Dbghelp.h就可以使用這個函數(shù),但是我的vc沒有這個頭文件
PFNEXPORTFUNC ImageRvaToVax=NULL;
HMODULE hModule=::LoadLibrary("DbgHelp.dll");
if(hModule!=NULL){
ImageRvaToVax=(PFNEXPORTFUNC)::GetProcAddress(hModule,"ImageRvaToVa");
if(ImageRvaToVax==NULL){
::FreeLibrary(hModule);
printf("取得函數(shù)失敗\n");
return ;
}
}else{
printf("加載模塊失敗\n");
return ;
}
if(FindFirstFile(fileName,lpwfd_first)==NULL){//返回值為NULL,則文件不存在,游野退出
printf("文件不存在: %s ",fileName);
return ;
}else{
DWORD fileAttrib=lpwfd_first-dwFileAttributes;
}
hFile=CreateFile(fileName,GENERIC_READ,0,0,OPEN_EXISTING,fileAttrib,0);
if(hFile==INVALID_HANDLE_VALUE){
printf("打開文件出錯!");
return ;
}
hFileMap=CreateFileMapping(hFile,0,PAGE_READONLY,0,0,0);
if(hFileMap==NULL){
CloseHandle(hFile);
printf("建立內(nèi)存映射文件出錯!");
return ;
}
mod_base=MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0);
if (mod_base==NULL)
{
printf("建立內(nèi)存映射文件出錯!");
CloseHandle(hFileMap);
CloseHandle(hFile);
return ;
}
IMAGE_DOS_HEADER* pDosHeader = (IMAGE_DOS_HEADER*)mod_base;
IMAGE_NT_HEADERS * pNtHeader =
(IMAGE_NT_HEADERS *)((BYTE*)mod_base+ pDosHeader-e_lfanew);//得到NT頭首址
//IMAGE_NT_HEADERS * pNtHeader =ImageNtHeader (mod_base);
IMAGE_OPTIONAL_HEADER * pOptHeader =
(IMAGE_OPTIONAL_HEADER *)((BYTE*)mod_base + pDosHeader-e_lfanew + 24);//optional頭首址
IMAGE_EXPORT_DIRECTORY* pExportDesc = (IMAGE_EXPORT_DIRECTORY*)ImageRvaToVax(pNtHeader,mod_base,pOptHeader-DataDirectory[0].VirtualAddress,0);
//導(dǎo)出表首址
PDWORD nameAddr=(PDWORD)ImageRvaToVax(pNtHeader,mod_base,pExportDesc-AddressOfNames,0);//函數(shù)名稱表首地址每個DWORD代表一個函數(shù)名字字符串的地址
PCHAR func_name = (PCHAR)ImageRvaToVax(pNtHeader,mod_base,(DWORD)nameAddr[0],0);
DWORD i=0;
DWORD unti=pExportDesc-NumberOfNames;
for(i=0;iunti;i++){
printf("%s\n",func_name);
func_name = (PCHAR)ImageRvaToVax(pNtHeader,mod_base,(DWORD)nameAddr[i],0);
}
::FreeLibrary(hModule);
CloseHandle(hFileMap);
CloseHandle(hFile);
}
這個相對路徑是滾宴閉你當(dāng)前代碼存放的位置.
實際應(yīng)用中相對大裂路徑比絕對路徑實用多了.
比如你可以再代碼路徑祥虧上再創(chuàng)建一個文件夾,命令dll,里面放所有的dll文件
那么你此時路徑".\\dll\\test.dll"
你可以發(fā)給我,我?guī)湍憧纯?/p>
分享名稱:c語言獲得dll的函數(shù)名 c獲取uuid
網(wǎng)站地址:http://chinadenli.net/article6/dsphiog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、網(wǎng)站策劃、搜索引擎優(yōu)化、移動網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)