سؤال

امتلاك مجموعة مساعدة منفصلة تحتوي فقط على إعلانات P/Invoke لمكونات الطرف الثالث القديم ، أتساءل أي من هاتين الطريقتين هو أفضل واحد إذا كان يجب وضع علامة على CLS متوافقة:

  • يستخدم Int32 في عام P/استدعاء إعلان حيث كان الإعلان غير المدير الإدارة unsigned int.
  • يستخدم UInt32 في داخلي P/استدعاء إعلان حيث كان الإعلان غير المدير الإدارة unsigned int, ، ولفها في أ عام الطريقة التي تأخذ Int32 ويحولها إلى UInt32 عند استدعاء داخلي طريقة.

ما هي الجوانب الصاعدة والسلبية لهذه؟

هل كانت مفيدة؟

المحلول

لن يشتكي P/Invoke Marshaller عندما تصبح UINT كبيرة جدًا ، فسوف ينتهي بك الأمر إلى int سلبية. الطبقة الإضافية تسمح لك باستخدام التحقق الكلمة الرئيسية لإنشاء فائض. وهو أمر مرغوب فيه إلى حد ما.

ما إذا كان الأمر يستحق المتاعب هو سؤال ثانوي. الكثير من واجهات برمجة التطبيقات ، مثل Win32 ، تستخدم غير موقعة ك منطقي قيد. مثل طول السلسلة أو حجم كتلة الذاكرة ، لا يمكن أن تكون سالبة أبدًا. في الممارسة العملية ، لا يمكن أن يفيض مثل هذا الرقم. لأنه لا يمكن تخصيص الكثير من الذاكرة. لا أستطيع أن أتذكر الركض مرة واحدة في واجهة برمجة التطبيقات حيث كان من الممكن استخدام uint. على هذا النحو ، أعتقد أنك بخير فقط باستخدام إعلان Pinvoke مباشرة مع INTS.

نصائح أخرى

لا أعتقد أنك ستحصل على السلوك الصحيح إذا ذهبت مع الخيار 1. لا يمكن أن تصل إلى 2،147،483،647 فقط. في حين أن INT غير موقعة تصل إلى 4،294،967،295. طالما أنك تعلم أنك لا تحتاج إلى أي قيم تزيد عن ملياري ، فهذا لا يهم حقًا. ولكن لكي تكون صحيحة من الناحية الفنية ، يجب أن تعرض الواجهة العامة نوعًا أكبر وأن تؤدي حدود للتأكد من أنها تتناسب مع int غير موقعة ورمي استثناء إذا لم يحدث ذلك. int64 سوف تفعل (9،223،372،036،854،775،807).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top