سؤال

كيف يمكنني أن يلقي طويلة إلى HWND (C++ visual studio 8)?

Long lWindowHandler;
HWND oHwnd = (HWND)lWindowHandler;

ولكن لدي التحذير التالية:

تحذير C4312:'نوع الزهر' :التحويل من 'طويلة' إلى 'HWND' أكبر حجم

شكرا

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

المحلول 2

HWND هو مقبض النافذة.هذا النوع هو أعلن في WinDef.ح على النحو التالي:

الرموز المميزة ل typedef التعامل مع HWND;

مقبض مقبض كائن.هذا النوع هو أعلن في WinNT.ح على النحو التالي:

الرموز المميزة ل typedef PVOID مقبض ؛

وأخيرا ، PVOID هو مؤشر إلى أي نوع.هذا النوع هو أعلن في WinNT.ح على النحو التالي:

الرموز المميزة ل typedef الفراغ *PVOID;

لذا HWND هو في الواقع مؤشر على الفراغ.يمكنك أن يلقي طويلة إلى HWND مثل هذا:

HWND h = (HWND)my_long_var;

ولكن حذرا جدا من المعلومات المخزنة في my_long_var.لديك للتأكد من أن لديك مؤشر في هناك.

في وقت لاحق تحرير:تحذير تشير إلى أن كنت قد حصلت على 64 بت قابلية الشيكات تشغيل.إذا كنت بناء 32 بت التطبيق يمكنك تجاهلها.

نصائح أخرى

طالما أنت متأكد من أن لديك حقا HWND, ثم انها بسيطة مثل:

HWND hWnd = (HWND)(LONG_PTR)lParam;

للقيام بذلك هي آمنة فقط إذا كنت لا تعمل على الإصدار 64 بت من windows.النوع الطويل هو 32 بت ، ولكن التعامل مع نوع ربما 64 بت.سوف تحتاج لجعل الخاص بك رمز 64 بت نظيفة.باختصار, سوف تحتاج إلى تغيير طويل إلى LONG_PTR.

قواعد استخدام مؤشر أنواع:

لا يلقي مؤشرات إلى الباحث ، طويلة ، ULONG ، أو DWORD.إذا كان يجب أن يلقي المؤشر لاختبار بعض القطع, أو الواضح بت ، أو التلاعب محتوياته, استخدام UINT_PTR أو INT_PTR نوع.هذه الأنواع هي جزء لا يتجزأ من أنواع مقياس حجم مؤشر على حد سواء 32 - و 64 بت Windows (على سبيل المثال ، ULONG 32 بت ويندوز _int64 64 بت ويندوز).على سبيل المثال, افترض أنك ترقية البرمجية التالية:

ImageBase = (PVOID)((ULONG)ImageBase | 1);

كجزء من عملية ترقية ، تغيير التعليمات البرمجية كما يلي:

ImageBase = (PVOID)((ULONG_PTR)ImageBase | 1);

استخدام UINT_PTR و INT_PTR حيث المناسبة (و إذا كنت غير متأكد سواء كانت مطلوبة, لا يوجد ضرر في استخدامها فقط في حالة).هل لا يلقي بك المؤشرات إلى أنواع ULONG طويلة ، الباحث ، UINT ، أو DWORD.

علما بأن التعامل يعرف باطلا* حتى بتلبيس مقبض القيمة إلى ULONG قيمة الاختبار ، ، مسح الترتيب المنخفض 2 بت خطأ على ويندوز 64-بت.

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