Ich möchte diese Methode in nicht verwalteten Bibliothek nennen:Wie marschiere ich int * in C#?
void __stdcall GetConstraints(
unsigned int* puiMaxWidth,
unsigned int* puiMaxHeight,
unsigned int* puiMaxBoxes
);
Meine Lösung:
Delegate Definition:
[UnmanagedFunctionPointer (CallingConvention.StdCall)] privaten delegate void GetConstraintsDel (UIntPtr puiMaxWidth, UIntPtr puiMaxHeight, UIntPtr puiMaxBoxes);
Der Aufruf der Methode:
// 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); }
Es funktioniert, aber ich muss "unsicher" Flag ermöglichen. Gibt es eine Lösung ohne unsicheren Code? Oder ist diese Lösung in Ordnung? Ich verstehe die Auswirkungen der Einstellung des Projekts mit unsicherer Flagge nicht ganz.
Vielen Dank für Ihre Hilfe!
Ich glaube, es sollte funktionieren, wie es ist (minus die adress von Operatoren) ohne den unsicheren Block ... –
Es funktioniert nicht. Der Konstruktor von UIntPtr übernimmt als Parameter die Zeigeradresse. –