Неверное преобразование из HANDLE в HINSTANCE (получение адреса функции ядра)

Я пытаюсь найти адрес SetProcessDEPPolicy функция Windows API в kernel32 (увидеть мою проблему здесь и первый ответ, который я получил).

Я никогда раньше не писал программы для 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.

(Как только я получу это для компиляции, как я могу напечатать адрес в указателе?)

РЕДАКТИРОВАТЬ: Добавлено предложение Cyclone из комментария, получая ту же ошибку Invalid conversion from HANDLE to HINSTANCE

0

Решение

Вот как вы должны это сделать:

#include <windows.h>
#include <iostream>

int main(int argc, char* argv[])
{
HMODULE kernel32 = GetModuleHandleA("kernel32");
FARPROC *funcAddr = (FARPROC *)GetProcAddress(kernel32, "SetProcessDEPPolicy");
std::cout << "@" << funcAddr;
}
3

Другие решения


По вопросам рекламы [email protected]