Articles of non

Chiamando una funzione C ++ da C # – pila sbilanciata

Ho una funzione C ++ non gestita con la seguente firma: int function(char* param, int ret) Sto provando a chiamarlo da C #: unsafe delegate int MyFunc(char* param, int ret); … int Module = LoadLibrary(“fullpathToUnamanagedDll”); IntPtr pProc = GetProcAddress(Module, “functionName”); MyFunc func = (MyFunc)System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(pProc, typeof(MyFunc)); unsafe { char* param = null; int ret = 0; […]

Asp.net chiama il livello C # chiamando Managed C ++ chiamando Native C ++

La mia struttura del progetto è la seguente: ASP.NET chiama il livello C # chiamando C ++ gestito chiamando Native C ++ (sto cercando di evitare l’uso di interop quindi questo è il motivo per il livello c ++ gestito) Ho scritto test di unità che testano il livello C # e funziona bene. Quando […]

Il codice di serializzazione causa un’eccezione non gestita

Sto tentando di creare un codice che può serializzare e deserializzare una libreria di classi in un disegno AutoCAD. Questa domanda ha poco a che vedere con AutoCAD se non perché non è ansible eseguirne il debug con mezzi normali. Ho iniziato questo progetto da questo articolo e ho ottenuto con successo il suo codice […]

Come denominare con forza una Dll C ++ non gestita?

Sto lavorando su un’applicazione C # che utilizza la libreria EasyHook per DLL Injection. EasyHook richiede che qualsiasi applicazione che lo utilizza sia fortemente denominata. Per dare un nome forte all’applicazione ho bisogno di assicurarmi che tutte le librerie che uso siano anche fortemente chiamate. Questo è facile da fare per tutte le mie librerie […]

Marshal.PtrToStringUni () vs new String ()?

Supponiamo di avere un puntatore di tipo char * nella stringa unicode e conosco la lunghezza: char* _unmanagedStr; int _unmanagedStrLength; e ho 2 modi per convertirlo in .NET string: Marshal.PtrToStringUni((IntPtr)_unmanagedStr, _unmanagedStrLength); e new string(_unmanagedStr, 0, _unmanagedStrLength); Nei miei test, entrambe le chiamate mi danno esattamente lo stesso risultato, ma la new string() è uguale a […]

Come inviare una stringa facendo riferimento a una libreria C non gestita che modifica quella stringa?

Sono nuovo nel mondo di interagire con le librerie non gestite. Ho una funzione C non gestita che modifica una stringa per riferimento all’interno della funzione. Ho problemi a passare una stringa da C # e ad ottenerla modificata dalla funzione C. Ecco la funzione C: __declspec(dllexport) void __stdcall Test(char* name) { *name = “Bar”; […]

Problemi di perdita di memoria: smaltire o non disporre di risorse gestite?

Provo una strana perdita di memoria nel calcolo di costose applicazioni di recupero di immagini basate sul contenuto (CBIR) .NET Il concetto è che esiste una class di servizio con loop loop che cattura le immagini da qualche sorgente e le passa quindi al thread di tagging delle immagini per l’annotazione. I tag immagine vengono […]

System Wide Shell Hook da .NET che utilizza DLL non gestita

Ho usato il codice fornito nel seguente articolo CodeProject in passato con successo, ma sembra funzionare solo parzialmente su Vista / 7 (sto indovinando a causa di UAC). Funziona per il thread corrente, ma non rileva attività a livello di sistema. Ho provato ad aggiungere requireAdministrator nei manifesti e a firmare sia gli assembly non […]

Esportazioni non gestite con matrici

Sto usando la libreria DLLExport di RGiesecke per produrre una DLL C # che può essere caricata dynamicmente da Delphi. Ho un metodo come: [DllExport(“GetVals”, CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)] static void GetVals([In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] valueList, int len) { valueList = new int[3]; int[] arrList = new int[] { 1, 2, 3 }; […]

Marshalling byval C-structure come valore di ritorno in C #

Ho un codice non gestito: … typedef struct foo { int a; bool b int c; } FOO,*LPFOO; …. __declspec(dllexport) FOO __stdcall GetFoo() { FOO f; return f; } …. Ho dichiarato il prototipo C # per la funzione GetFoo: [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct Foo { public int a; public bool b public […]