Je voudrais appeler cette méthode dans la bibliothèque non gérée:Comment marshal int * en C#?
void __stdcall GetConstraints(
unsigned int* puiMaxWidth,
unsigned int* puiMaxHeight,
unsigned int* puiMaxBoxes
);
Ma solution:
définition de délégué:
[UnmanagedFunctionPointer (CallingConvention.StdCall)] délégué privé GetConstraintsDel vide (PUISSANCE MAXIMALE UINTERPTR, PUISSANCE MAXIMALE UINTER, PUISSANCE INFÉRIEURE);
L'appel de la méthode:
// PLUGIN NAME GetConstraintsDel getConstraints = (GetConstraintsDel)Marshal.GetDelegateForFunctionPointer(pAddressOfFunctionToCall, typeof(GetConstraintsDel)); uint maxWidth, maxHeight, maxBoxes; unsafe { UIntPtr a = new UIntPtr(&maxWidth); UIntPtr b = new UIntPtr(&maxHeight); UIntPtr c = new UIntPtr(&maxBoxes); getConstraints(a, b, c); }
Il fonctionne, mais je dois laisser le drapeau "dangereux". Y a-t-il une solution sans code dangereux? Ou est-ce que cette solution est correcte? Je ne comprends pas très bien les implications de la configuration du projet avec un drapeau non sécurisé.
Merci pour votre aide!
je crois qu'il devrait fonctionner comme il est (moins l'adresse des opérateurs) sans bloc dangereux ... –
Il ne fonctionne pas. Le constructeur de UIntPtr prend comme paramètre l'adresse du pointeur. –