Articles of marshalling

Approche préférée pour la compilation conditionnelle pour les versions 32 bits et 64 bits des types

Je suis tenu, pour une tâche donnée, d’énumérer tous les descripteurs du système. La meilleure approche que j’ai trouvée jusqu’à présent consiste à utiliser l’information NtQuerySystemInformation documentée NtQuerySystemInformation avec l’indicateur SystemHandleInformation pour le paramètre de classe. Jusqu’ici tout va bien. Cependant, en l’exécutant en mode 32 bits sous Windows 64 bits, la structure requirejse est […]

Formatage des parameters de la fonction Dll externe au format C #

Je n’ai pas encore trouvé de bonne référence sur ce sujet. Pour cet exemple, prenons du code C ++ que je tente de transférer en C #. En C ++, nous avons le prototype suivant pour une fonction de bibliothèque externe: extern “C” DWORD EXPORT FILES_GetMemoryMapping( PSTR pPathFile, PWORD Size, PSTR MapName, PWORD PacketSize, PMAPPING […]

Comment convertir une structure C ++ avec Union en C #?

Les gars, j’ai du mal à récupérer les valeurs des membres de la structure après avoir appelé une fonction dans la DLL. J’ai essayé de convertir les codes C ++ en C # mais je ne suis pas sûr que ce soit correct ou non. S’il vous plaît, aidez-moi à comprendre mes erreurs ici (s’il […]

C # Marshalled Callbacks

J’essaie de Marshall c rappels qui sont dans une structure. Je suis à peu près sûr que tout est correct, mais lorsque j’utilise mon exemple C #, je ne reçois pas d’événements, mais lorsque j’utilise c ++, je les reçois Voici le C # class Program { [DllImport(“Some.dll”, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public […]

Marshalling Structures complexes entre C # / C ++

J’essaie de renseigner un tableau de structures à partir de C ++ et de renvoyer le résultat en C #. Je pensais que peut-être créer une structure avec un tableau de structures pourrait être la voie à suivre car la plupart des exemples que j’ai rencontrés utilisent des structures (mais en passant des types de […]

Processus de C # à C ++ avec WM_COPYDATA en passant une structure avec des chaînes

Du programme ac #, je souhaite utiliser WM_COPYDATA avec SendMessage pour communiquer avec une application MFC héritée c ++ / cli. Je veux passer une structure gérée contenant des objects chaîne. Je peux trouver le descripteur de l’application c ++ à utiliser avec SendMessage fine. Ce que je ne connais pas, c’est comment la structure […]

Marshalling un personnage ** en C #

J’interface avec le code qui prend un caractère char** (c’est-à-dire un pointeur sur une chaîne): int DoSomething(Whatever* handle, char** error); Fondamentalement, il prend une poignée à son état, et si quelque chose ne va pas, il renvoie un code d’erreur et éventuellement un message d’erreur (la mémoire est allouée en externe et libérée avec une […]

Struct marshal en C #

J’ai la structure suivante en C # unsafe public struct control { public int bSetComPort; public int iComPortIndex; public int iBaudRate; public int iManufactoryID; public byte btAddressOfCamera; public int iCameraParam; public byte PresetNum; public byte PresetWaitTime; public byte Group; public byte AutoCruiseStatus; public byte Channel; public fixed byte Data[64]; } Et la fonction que j’utilise […]

Marshalling de chaîne C # et LocalAlloc

J’ai un rappel COM d’une DLL non gérée que je dois utiliser en C #. La DLL non gérée s’attend à ce que l’appelé alloue de la mémoire à l’aide de LocalAlloc (que l’appelant LocalFree ), le WSTR avec WSTR et définisse la value et les chars avec le pointeur WSTR et la longueur de […]

Erreur PInvoke lors de l’appel de la fonction non managée (C ++) à partir de C #

J’ai une dll démodée C ++ que j’ai écrite et testée. Le code non lié fonctionne correctement lorsqu’il est créé et exécuté dans une application console non modifiée. La déclaration de fonction est indiquée ci-dessous. #ifndef IMPORT_MYLIB # define MYLIB_API __declspec(dllexport) #else # define MYLIB_API __declspec(dllimport) #endif namespace gsod_data_parsing { extern “C” { MYLIB_API int […]