Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    45

    [C]errore prototipo puntatore a funzione

    ho trovato un programma che inizia con queste linee,qualcuno mi puo spiegare in particolar modo la using all'inizio della linea
    dove viene definito il prototipo della funzione MessageBoxA
    il programma mi da i seguenti errori

    error C2143: errore di sintassi: ';' mancante prima di '='
    error C2873: 'PrototypeMessageBox': il simbolo non può essere utilizzato in una dichiarazione using
    error C2513: 'int': nessuna variabile dichiarata prima di '='
    error C2143: errore di sintassi: ')' mancante prima di '__stdcall'
    error C2059: errore di sintassi: ')'
    error C2146: errore di sintassi: ';' mancante prima dell'identificatore 'originalMsgBox'
    error C4430: identificatore di tipo mancante, verrà utilizzato int. Nota: default-int non è più supportato in C++
    error C2440: 'inizializzazione': impossibile convertire da 'int (__stdcall *)(HWND,LPCSTR,LPCSTR,UINT)' a 'int'

    codice:
    #include "stdafx.h"
    #include <iostream>
    #include <Windows.h>
    #include <winternl.h>
    #include <conio.h>
    #include <string>
    using namespace std;
    
    
    // define prototype per la funzione MessageBoxA
    using  PrototypeMessageBox = int (WINAPI *)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
    // remember memory address of the original MessageBoxA routine
    PrototypeMessageBox originalMsgBox = MessageBoxA;

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Stai cercando di compilare codice per IAT Hooking?

    Quale versione di C++ usi? Con VS2015 e VS2022 non ci sono errori.
    Quella using serve a definire un alias tipo per quella funzione (con parametri e valore restituito) da utilizzarsi in seguito. Un po' come la typedef

    https://en.cppreference.com/w/cpp/language/type_alias
    Ultima modifica di oregon; 06-11-2023 a 11:45
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    45
    uso visual studio express 2012 c++
    ho modificato la linea in questo modo e ha funzionato.
    grazie per la risposta.

    codice:
    typedef int (WINAPI *PrototypeMessageBox)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da dario09 Visualizza il messaggio
    uso visual studio express 2012 c++
    ho modificato la linea in questo modo e ha funzionato.
    grazie per la risposta.

    codice:
    typedef int (WINAPI *PrototypeMessageBox)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
    Sì, ok, non so se la 2012 supportasse la using di C++11 comunque con la typedef va bene.

    Ma tu hai compilato un sorgente .C o .CPP?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    45
    uso .cpp

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da dario09 Visualizza il messaggio
    uso .cpp
    Allora devi controllare nelle proprietà del progetto quale versione di compilatore C++ stai usando.
    Probabilmente è una versione che non supporta la using in quel senso.

    Aggiorna Visual Studio o usa la typedef.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.