che sto debug di un'applicazione C++ Win32 e mi piacerebbe chiamare un API Win32 arbitraria dal contesto di quel processo, come se il programma era eseguito questa riga di codice:Posso chiamare un'API Win32 dalla finestra di Visual Studio Immediate?
DestroyWindow(0x00021c0e);
Ma entrare che in la finestra immediata dà:
CXX0017: Error: symbol "DestroyWindow" not found
Edit: utilizzando il nome completo della funzione, {,,user32.dll}[email protected]
, posso ottenere la finestra immediata per capire quale funzione intendo e visualizzare l'indirizzo della funzione:
{,,user32.dll}[email protected]
0x76600454 [email protected]
ma quando provo a chiamarlo, questo accade:
{,,user32.dll}[email protected](0x00021c0e);
CXX0004: Error: syntax error
E 'anche possibile chiamare una funzione C dalla finestra immediata come questo, o sono abbaiare contro l'albero sbagliato?
Grazie per l'idea, ma ... Questo mi dà 'CXX0004: Errore: errore di sintassi'. Sostituire i tipi di Windows ('BOOL' e' HWND') con i tipi primitivi ('int' in entrambi i casi) migliora le cose, ma poi ottengo' CXX0014: Error: missing operando'. (Sono in un processo a 32 bit, BTW.) – RichieHindle
Il debugger di VS è davvero pessimo per analizzare i tipi di puntatore di funzione, apparentemente. Prova a creare un typedef per questo. Metti 'typedef BOOL (* DESTROYWINDOW) (HWND);' nel tuo codice, quindi scrivi '(* (DESTROYWINDOW) 0x76600454) ((void *) 0x00021c0e)' nel debugger. –
@Adam: Yay! (ma qualificata). Aggiungendo il tuo 'typedef' al mio codice, * e * effettivamente usando il' typedef' nel codice in modo che il compilatore non butta via la definizione, * e * interrompendo l'esecuzione del processo all'interno dell'unità di compilazione in cui ho usato il 'typedef', ora posso chiamare DestroyWindow dalla finestra immediata. Grazie! È un peccato dover saltare attraverso questi cerchi per farlo, ma almeno è possibile. – RichieHindle