Oppure

Loading
04/09/08 14:20
asdasd
Ciao a tutt isto scrivendo un driver per Windows in C
Devo creare un oggetto (struttura) di tipo OBJECT_ATTRIBUTES
msdn.microsoft.com/en-us/library/…
facendo normalmente cosi'
OBJECT_ATTRIBUTES   miavariabile;


Il problema è che quando ho compilato mi dava un errore
'OBJECT_ATTRIBUTES' : illegal use of this type as an expression


Allora, visto che la creazione della variabile mi sembrava giusta, mi son messo a commentare tutto il sorgente per individuare l'errore, lo ho semplificato al massimo ( son rimaste poche righe da compilare) e ho forse scoperto dove è il problema ->

#include <winddk.h>

...
...

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) 
{
  ...

     __asm
       {
	push	eax
	mov		eax, CR0
	or		eax, NOT 0FFFEFFFFh
	mov		CR0, eax
	pop		eax
      }

OBJECT_ATTRIBUTES    TDI_Object_Attr;

  ...
 return STATUS_SUCCESS;
}


Compilandolo mi da
error C2143: syntax error : missing ';' before 'type'

alla linea dove dichiaro la variabile.
Commentando tutto il pezzo con asm{...} non dà errori.

Dove è lo (probabilmente stupido) errore?
aaa
05/09/08 9:30
lorelapo
{} non è un commento è una istruzione complessa, se tu non metti le parentesi il compilatore non può capire dove finisce il codice asm e dove inizia la dichiarazione.
aaa
08/09/08 10:44
asdasd
No non hai capito, lo so benissimo che le graffe su asm non sono un commento.

Ho detto solo che se commentavo il pezzo con asm


/* __asm{
blabla
blabla
}
*/

Non dava errori.

Qualche idea?
Ultima modifica effettuata da asdasd 08/09/08 10:45
aaa
09/09/08 10:15
gantonio
Quale compilatore usi?

E' possibile che stai usando la compilazione secondo le regole del C e non del C++.

Prova a dichiarare la tua variabile PRIMA del blocco asm (ovvero PRIMA di qualsiasi istruzione all'interno della tua funzione ...)
Ultima modifica effettuata da gantonio 09/09/08 10:21
aaa
14/09/08 11:52
asdasd
Utilizzo il compilatore standard fornito con il DDK

Ovvero creo i file SOURCES e MAKEFILE, imposto i sorgenti e lancio semplicemente build del DDK

Ho fatto come dici tu, mettendo la dichiarazione delle variabili all'inizio e sembra che funzioni

Solo che decommentando tutto mi da altri errori del genere su altre variabili. Ci sto ancora lavorando, vi faccio sapere. comunque devo cambiare qualche opzione?

Grazie per le risposte.
aaa