Я хотел бы назвать этот метод в неуправляемой библиотеке:Как перевести int * в C#?
void __stdcall GetConstraints(
unsigned int* puiMaxWidth,
unsigned int* puiMaxHeight,
unsigned int* puiMaxBoxes
);
Моим решения:
определение делегата:
[UnmanagedFunctionPointer (CallingConvention.StdCall)] частного делегат недействительного GetConstraintsDel (UIntPtr puiMaxWidth, UIntPtr puiMaxHeight, UIntPtr puiMaxBoxes);
Вызов метода:
// 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); }
Это работает, но я должен позволить "небезопасный" флаг. Есть ли решение без небезопасного кода? Или это решение нормально? Я не совсем понимаю последствия установки проекта с помощью небезопасного флага.
Спасибо за помощь!
Я считаю, что он должен работать, как это (минус адрес операторов) без небезопасного блока ... –
Это не работает. Конструктор UIntPtr принимает в качестве параметра адрес указателя. –