Ciao a tutti,
ho un problema nell'utilizzo del metodo WriteInt32 della classe Marshal.
Premetto che il codice in questione, se può essere utile, è contenuto in una DLL.
Ho un metodo che alloca tramite AllocHGlobal una cera quantità di bytes ricavandone il puntatore (IntPtr). Successivamente, nel momento in cui tento di scrivere nella memoria referenziata dal puntatore, un numero utilizzando WriteInt32, mi viene restituita un'eccezione AccessViolationException.
Ho consultato quindi le pagine MSDN relative al metodo WriteInt32 ed ho visto che questo metodo richiede che siano settati degli attributi di sicurezza (SecurityPermissionAttribute del namespace System::Security::Permissions).
Nello specifico, viene richiesto l'attribute LinkDemand, quindi utilizzando gli esempi sempre di MSDN ho modificato il mio codice in questo modo:
public: System::Void MetodoCheRichiedePermessi(void) {
.....
Marshal::WriteInt32(mioPtr, 20);
....
}
[SecurityPermissionAttribute(SecurityAction::LinkDemand, UnmanagedCode = true)] //errore qui
public: System::Void MetodoChiamante(void) { // errore qui
MetodoCheRichiedePermessi();
}
Il problema è che quando compilo mi vengono restituiti questi errori:
error C2440: '=': impossibile convertire da 'bool' a 'System::Security::Permissions::SecurityPermissionFlag'
error C2334: token imprevisti prima di ':'. Il corpo apparente della funzione verrà ignorato.
error C2059: errore di sintassi: 'public'
Su google ho trovato ben poco, o meglio, l'argomento è molto trattato ma gli esempi sono in VB, io sto utilizzando VC++ e non riesco in nessun modo a convertire il codice.
Qualcuno ha già avuto questo problema? Oppure può indicarmi un modo per risolvere?
E' molto urgente, vi ringrazio in anticipo.
Saluti!