ben yönetilmeyen kütüphanede bu yöntem çağırmak istiyorum:C# içinde marshal nasıl *?
void __stdcall GetConstraints(
unsigned int* puiMaxWidth,
unsigned int* puiMaxHeight,
unsigned int* puiMaxBoxes
);
Çözümümün:
Delege tanımı:
[UnmanagedFunctionPointer (CallingConvention.StdCall)] özel temsilci geçersiz GetConstraintsDel (UIntPtr puiMaxWidth, UIntPtr puiMaxHeight, UIntPtr puiMaxBoxes);
yöntemin çağrı:
// 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); }
O inşaat ama "güvenli olmayan" bayrağını izin vermek zorunda. Güvenli olmayan kodsuz bir çözüm var mı? Yoksa bu çözüm tamam mı? Projeyi güvensiz bayrakla kurmanın etkilerini tam olarak anlamadım.
Yardımlarınız için teşekkürler!
Ben (eksi adres operatör) güvensiz bloğu olmadan ... –
O çalışmıyor olduğu gibi çalışması gerekir inanıyoruz. UIntPtr kurucusu işaretçi adresi parametresini alır. –