hur.cn - 华软网

 热门搜索

求解释!

  作者:未知    来源:网络    更新时间:2011/8/12
GMFNE=(DWORD (__stdcall *) (HANDLE, HMODULE,LPTSTR,DWORD))GetProcAddress(hPsapi,"GetModuleFileNameExA"); 其中 (DWORD (__stdcall *) (HANDLE, HMODULE,LPTSTR,DWORD))这一句完全看不懂啊。
---华软 网友回答---
(DWORD (__stdcall *) (HANDLE, HMODULE,LPTSTR,DWORD))
声明了一个函数指针
返回值为DWORD,调用约定为__stdcall,有4个参数
---华软网友回复---
GetModuleFileNameExA()函数可以实现通过进程句柄获取进程文件名,其原型为:   DWORD GetModuleFileNameExA(HANDLE hProcess, HMODULE hModule,LPTSTR lpstrFileName, DWORD nsize); 
 参数hProcess:接受进程句柄的参数,是HANDLE类型的变量;   参数hModule:指针型参数,在本文的程序中取值为NULL;   参数lpstrFileName:LPTSTR类型的指针,用于接受主调函数传递来的用于存放进程名的字符数组指针;   参数nsize:lpstrFileName所指数组的长度;   函数返回值:如果调用成功,返回一个大于0的DWORD类型的数据,同时将hProcess所对应的进程名存放在lpstrFileName参数所指向的数组中;加果调用失败,则返回0。
---华软网友回复---
代码谁写的,太懒了吧。

这样解释:

  DWORD (__stdcall *) (HANDLE, HMODULE,LPTSTR,DWORD);//是一位函数指针 
就是接受链接库GetModuleFileNameExA内存一起而创建的一个函数指针。

 通常解释就是这样

 int (pFun*) (int a, int b);//这是函数指针
 pFun p;//创建对象

打个比方GetModuleFileNameExA模型这样
int GetModuleFileNameExA(int a,int b);

  然后赋值p = GetProcAddress(hPsapi,"GetModuleFileNameExA"); 
  int c = p(3,5);//调用GetModuleFileNameExA函数是一个意思
 
---华软网友回复---

 
刚刚忘了强制类型转换了。
p = 强制类型转换(pFun)GetProcAddress(hPsapi,"GetModuleFileNameExA");  
  int c = p(3,5);//调用GetModuleFileNameExA函数是一个意思
 
---华软网友回复---
谢谢各位,  看了你们的解释我终于懂了。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。