Errores de compilación en C ++

Estoy haciendo ООН ejemplo обманный API, сцепляющий ya que estoy escribiendo un artículo al respecto de entrada меня encuentro, подставляют Лос siguientes ошибки:

Dynamic.cpp:8:30: error: 'typedef void (* SendMessageW)()' redeclared as differe   nt kind of symbol
 typedef void (*SendMessageW)();//Typedef for the hooked function
                              ^
In file included from C:/msys32/mingw32/i686-w64-mingw32/include/windows.h:72:0,
                 from C:\Users\Androide\Desktop\minhook\Dynamic\MinHook_133_src\   include\MinHook.h:35,
                 from Dynamic.cpp:1:
C:/msys32/mingw32/i686-w64-mingw32/include/winuser.h:1981:29: note: previous dec   laration 'LRESULT SendMessageW(HWND, UINT, WPARAM, LPARAM)'
   WINUSERAPI LRESULT WINAPI SendMessageW(HWND hWnd,UINT Msg,WPARAM wParam,LPARA   M lParam);
                             ^~~~~~~~~~~~
Dynamic.cpp:9:8: error: 'SendMessageW' does not name a type
 static SendMessageW Basewritefoobar;//Backup of the originak fonction
        ^~~~~~~~~~~~
Dynamic.cpp:13:16: warning: 'LRESULT SendMessageW(HWND, UINT, WPARAM, LPARAM)' r   edeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
 LRESULT WINAPI SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
                ^~~~~~~~~~~~
Dynamic.cpp: In function 'bool Hook()':
Dynamic.cpp:64:73: error: 'Basewritefoobar' was not declared in this scope
     if (MH_CreateHookEx((void*)&SendMessageW, (void*)&BSSSendMessageW, &Basewri   tefoobar) != MH_OK)
                                                                         ^~~~~~~   ~~~~~~~~

El código de mi programa:

#include "C:\Users\Androide\Desktop\minhook\Dynamic\MinHook_133_src\include\MinHook.h"//MHook header

    #include 
    #include 
    #include 
    #include //For getch
    using namespace std;

    typedef void (*SendMessageW)();//Typedef for the hooked function
    static SendMessageW Basewritefoobar;//Backup of the originak fonction



    LRESULT WINAPI SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

    static const wchar_t *hiddenprocess=L"tusitio";

    LRESULT WINAPI BSSSendMessageW(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
    {
        if ( msg == LVM_INSERTITEMW || msg == LVM_SETITEMW)//Intercepts LVM_INSERTITEM and LVM_SETITEM messages
        {
            if (!lstrcmpW(((LVITEMW*)lparam)->pszText, hiddenprocess))//The lparam is a LVITEM* struct.
            {
                return 0;//If the item name is the same as process we want to hide, we simply return 0 (and we do not call the real SendMessage function.
            }
            return 0;
        }
        return SendMessage(hwnd, msg, wparam, lparam);//Calls the real SendMessage function.
    }


    //void Writefoobar();//Original function
    //void Hookedwritefoobar();//Original function's redirection

    static bool Hook();

    template 
    inline MH_STATUS MH_CreateHookEx(void* target, void* const base, T** original)
    {
        return MH_CreateHook(target, base, reinterpret_cast(original));
    }

    int main()
    {
        if (!Hook())//Hook "Writefoobar"
        {
            cout << "Hook failed" << endl;
            return 1;
        }

        //Writefoobar();//Standard call to Writefoobar, but instead, Hookedwritefoobar will be executed

        cout << "Press a key to exit" << endl;
        _getch();
        return 0;
    }

    bool Hook()
    {
        if (MH_Initialize() != MH_OK)
        {
            return false;
        }

        if (MH_CreateHookEx((void*)&SendMessageW, (void*)&BSSSendMessageW, &Basewritefoobar) != MH_OK)
        {
            return FALSE;
        }
        return MH_EnableHook((void*)&SendMessageW) == MH_OK;
    }

API Estoy usando, сцепляющий y la librería minhook. Referencia: Libreria Minhook

Y sí Лос propositos сын meramente éticos escribir un artículo al respecto relacionado подставляют seguridad.

1
задан 19.03.2017, 16:16
1 ответ

Ты не можешь объявлять прозвище указателя в funci¦n, что назвался равно как funci¦n... (и имея тот же declaraci¦n).

ты Можешь предпочитать помещать прозвище в один namespace или менять ему имя для того, чтобы он не совпал с funci¦n, который ты импортируешь из WinAPI.

Из último ошибка я ничего не могу говорить тебе, потому что ты не включил соответствующий c¦digo.

3
ответ дан 24.11.2019, 10:29
  • 1
    có я говорю этот includo то, что перемещает, что использовала librerí и он позволяет приходящей ученице делать копию этой funció n. – Sergio Ramos 20.03.2017, 00:53
  • 2
    Ты не можешь объявлять прозвище указателя в funció n, что назвался, равно как funció n. Так как этот có я говорю, уходил ли я typedef void (*WRITEFOOBAR) (); и это был void funció n void Writefoobar (); он - по крайней мере любознательный человек. – Sergio Ramos 20.03.2017, 00:55
  • 3
    @OmarOmar подтверди, что в этом случае не совпадают mayú sculas – eferion 20.03.2017, 01:32

Теги

Похожие вопросы