मैं अप्रबंधित पुस्तकालय में इस विधि कॉल करना चाहते हैं:सी # में मार्शल int * कैसे करें?
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 का कन्स्ट्रक्टर पॉइंटर पता पैरामीटर के रूप में लेता है। –