me gustaría llamar a este método en la biblioteca no administrado:Cómo calcular el int * en C#?
void __stdcall GetConstraints(
unsigned int* puiMaxWidth,
unsigned int* puiMaxHeight,
unsigned int* puiMaxBoxes
);
Mi solución:
definición Delegado:
[UnmanagedFunctionPointer (CallingConvention.StdCall)] delegado privada GetConstraintsDel vacíos (UIntPtr puiMaxWidth, UIntPtr puiMaxHeight, UIntPtr puiMaxBoxes);
La llamada del método:
// 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); }
funciona, pero tengo que permitir que la bandera de "inseguro". ¿Hay una solución sin código inseguro? ¿O esta solución está bien? No entiendo muy bien las implicaciones de configurar el proyecto con una marca insegura.
¡Gracias por la ayuda!
creo que debería funcionar como lo es (menos la dirección de los operadores) y sin el bloque insegura ... –
No funciona. El constructor de UIntPtr toma como parámetro la dirección del puntero. –