Articles of non

Cosa succede esattamente durante una “transizione gestita-nativa”?

Capisco che il CLR ha bisogno di fare il marshalling in alcuni casi, ma diciamo che ho: using System.Runtime.InteropServices; using System.Security; [SuppressUnmanagedCodeSecurity] static class Program { [DllImport(“kernel32.dll”, SetLastError = false)] static extern int GetVersion(); static void Main() { for (; ; ) GetVersion(); } } Quando inserisco questo programma con un debugger, vedo sempre: Dato […]

Perché ricevo un errore FormatException non gestito?

Ho creato un programma e ne ho eseguito un test approfondito, ricevo un errore che indica che “FormatException non è stato gestito, la stringa di input non era in un formato corretto”. Il problema si verifica quando esco da una delle caselle di testo in bianco e preme il pulsante ‘Finito’, ma funziona bene se […]

O o richiesta di convalida

Voglio usare ComponentModel DataAnnotations convalidare che almeno una delle due proprietà ha un valore. Il mio modello assomiglia a questo: public class FooModel { public string Bar1 { get; set; } public int Bar2 { get; set; } } Fondamentalmente, voglio convalidare FooModel in modo che sia richiesto Bar1 o Bar2 . In altre parole, […]

Applicazione Easyhook a 32 bit

Sto usando EasyHook per intercettare le chiamate al registro. Più in dettaglio, utilizzo RegQueryValue per intercettare la chiamata che legge una chiave dal registro e ne modifica il valore con qualcos’altro. Il codice rilevante assomiglia a: [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] delegate int DRegQueryValueExW( IntPtr hKey, string lpValueName, int lpReserved, ref Microsoft.Win32.RegistryValueKind lpType, […]

Il modo migliore per chiamare il codice Managed .NET dal codice Unmanaged

Sto cercando di trovare il metodo di chiamata più performante nel codice Managed .NET dal codice C ++ non gestito. Ho trovato informazioni su Hosting .NET all’interno della mia applicazione C ++ e sono in grado di creare un pRuntimeHost e avviarlo senza problemi. ExecuteInDefaultAppDomain sembra molto limitato poiché desidero davvero inviarlo alcuni parametri e […]

Qual è la differenza tra un tipo non gestito e un tipo gestito?

Quando ho scritto il seguente frammento per scopi sperimentali, ho sollevato l’errore hover (vedi screenshot): Imansible dichiarare il puntatore a un tipo non-gestito ‘dinamico’ Il frammento: dynamic* pointerToDynamic = &fields; Sebbene il codice non sia chiaramente consentito (non è ansible prendere l’indirizzo di un tipo gestito), ha sollevato la domanda: che cos’è un tipo non […]

Passando il puntatore char da C # alla funzione c ++

Sono bloccato nel lato implementazione c #, dato che sono abbastanza nuovo ad esso. Il fatto è che voglio passare un ‘puntatore’ (che ha memoria) dal codice c # in modo che la mia applicazione c ++ possa copiare il buffer pchListSoftwares su pchInstalledSoftwares. Non sono in grado di capire come passare il puntatore dal […]

LayoutKind.Sequential non seguito quando substruct ha LayoutKind.Explicit

Quando si esegue questo codice: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace StructLayoutTest { class Program { unsafe static void Main() { Console.WriteLine(IntPtr.Size); Console.WriteLine(); Sequential s = new Sequential(); sA = 2; sB = 3; s.Bool = true; s.Long = 6; sCInt32a = 4; sCInt32b = 5; int* ptr = (int*)&s; […]

Codice minimo C # da estrarre dagli archivi .CAB o dai file XSN di InfoPath, in memoria

Ultimamente ho cercato di implementare alcune funzionalità che estrae i file da un file XSN di InfoPath (un archivio .CAB). Dopo lunghe ricerche su Internet, sembra che non ci sia alcuna API .NET nativa per questo. Tutte le soluzioni attuali sono incentrate su librerie di grandi dimensioni, ad esempio C ++ gestito che racchiudono Cabinet.dll. […]

Marshalling: cos’è e perché ne abbiamo bisogno?

Che cos’è il marshalling e perché ne abbiamo bisogno? Trovo difficile credere di non poter inviare un int over the wire da C # a C e devo farlo marshalling. Perché C # non può semplicemente inviare i 32 bit con un segnale di avvio e di terminazione, dicendo al codice C di aver ricevuto […]