我试图在kernel32
(see my problem here and the first answer I got)中找到Windows API的SetProcessDEPPolicy
函数的地址。从HANDLE到HINSTANCE的无效转换(获取内核函数的地址)
之前,所以我是有点失落,但我有这到目前为止,我从来没有写过一个Windows C++程序:
#include <windows.h>
#include <iostream>
int main(int argc, char* argv[])
{
HANDLE kernel32 = GetModuleHandle("kernel32");
FARPROC* funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy");
std::cout << "@ ";
}
我得到第7行下面的错误:
C:\Documents and Settings\John\Desktop>c++ finddep.cpp -o finddep.exe finddep.cpp: In function 'int main(int, char**)': finddep.cpp:7:79: error: invalid conversion from 'HANDLE {aka void*}' to 'HINSTA NCE' [-fpermissive] FARPROC funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy") ;
^
In file included from c:\mingw\include\windows.h:50:0,
from finddep.cpp:1: c:\mingw\include\winbase.h:1675:27: error: initializing argument 1 of 'int (__ attribute__((__stdcall__)) * GetProcAddress(HINSTANCE, LPCSTR))()' [-fpermissive ] WINBASEAPI FARPROC WINAPI GetProcAddress(HINSTANCE,LPCSTR);
^ finddep.cpp:7:79: error: cannot convert 'int (__attribute__((__stdcall__)) **)() ' to 'FARPROC {aka int (__attribute__((__stdcall__)) *)()}' in initialization FARPROC funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy") ;
我无法找到任何关于如何从Google解决此问题的好主意。
(?一旦我得到这个编译,我怎么能在指针的地址打印)
编辑:从评论中新增旋风的建议,得到同样的错误Invalid conversion from HANDLE to HINSTANCE
'FARPROC * funcAddr =(FARPROC *)' – Cyclonecode 2015-01-26 20:39:51
@Cyclone感谢您指出了这一点,但它声明为指针得到完全同样的错误。 '从HANDLE到HINSTANCE的无效对话' – Juicy 2015-01-26 20:41:03
错误是由于将一个无效参数传递给'GetProcAddress()'而引起的,我相信。只需确保,一步调用该函数,然后将其转换为另一个“FARPROC *”。请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/ms683199%28v=vs.85%29.aspx上的文档,该函数返回一个'HMODULE',而不是'HANDLE'。 – 2015-01-26 20:45:45