سؤال

أثناء تصفح بعض التعليمات البرمجية، وجدت مكالمة openprinter (). وبعد الكود يجمع ويعمل بشكل جيد. ولكن، نحن نمر HANDLE بدلا من LPHANDLE (كما هو محدد في MSDN). اكتشفت ذلك في windef.h يوجد الإعلان التالي:

typedef HANDLE FAR          *LPHANDLE;

ماذا يقف LP؟ يجب أن أستخدم LPHANDLE, ، أو الاحتفاظ بها HANDLE?

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

المحلول

LP يقف لمؤشر طويل. إنه مؤشر مقبض في هذه الحالة.

HANDLE h = <winapi function>();
LPHANDLE ph = &h;

يمكنك استخدامها بنفس الطريقة التي ستتعامل بها من خلال إلغاء تحديد المؤشر:

HANDLE anotherh = *ph;
or
<winapi function>(*ph, ...);

نصائح أخرى

"LP" تقف مؤشر طويل.

مقبض! = lphandle، تماما كما DWORD! = DWORD * (أو LPDWord)

ال بعيد بناء التواريخ العودة إلى أيام 8086/8088 وحدة المعالجة المركزية وسائط الذاكرة المجزأة التي استخدمتها. في ذلك اليوم يمكن أن يكون قرب و بعيد مؤشرات إلى الذاكرة.

ال لطف (مؤشر طويل) هو مجرد مخلفات من تدوين مايكروسوفت الهنغارية من تلك الأيام السابقة.

في هذه الأيام نموذج ذاكرة Win32 مسطح قرب و بعيد المؤشرات هي نفسها في الأساس. ولكن في حين أ بالقرب من المؤشر هو الآن نفس فوبرنر هذا لا يعني أن المؤشر هو نفسه مقبض.

ولتوفر لك القليل من مؤشرات الخلفية طويلة تسمى أيضا المؤشرات البعيدة كانت مختلفة عن مؤشرات 16 بت العادية في نوافذ 16 بت. استخدم نظام التشغيل طراز ذاكرة مجزأة حيث يمكنك تعويضه من قطعة أو إزاحة مقطع + مقبول طويل. تم استخدام الترميز الهنغاري LP لهذه المؤشرات الطويلة ولا تزال متأخرة في جميع أنحاء واجهة برمجة تطبيقات Windows لهذه الأسباب القديمة.

بالطبع في 32 بت و 64 بت، يستخدم Windows OSS نموذج ذاكرة مسطحة ولا يوجد تمييز بين المؤشرات في هذه OSS (على الرغم من أن PAE يضيف شيئا مماثل بشكل مفاهيم).

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