السلام عليكم ورحمة الله وبركاته
كتبت برنامج بسيط يستخدم GlobalAlloc, البرنامج يقوم بحجز مساحة حجمها 1024 ويكتب بها مئة "X" ثُم ينهيها بـNull byte ويظهر الناتج في MessageBox :
.386 .model flat, stdcall option casemap:none include windows.inc include user32.inc include kernel32.inc includelib kernel32.lib includelib user32.lib include C:\masm32\macros\macros.asm .data? buffer dd ? .data Merror db "Fail in `LocalAlloc'", 0 Mfine db "OK", 0 .code start: invoke GlobalAlloc, GMEM_ZEROINIT, 1024 .if eax == 0 invoke MessageBox, 0, addr Merror, 0, MB_OK invoke ExitProcess, 0 .endif mov buffer, eax mov eax, 0 .while eax != 100 mov [buffer + eax], "X" inc eax .ENDW add buffer, 0 invoke MessageBox, 0, addr buffer, addr Mfine, MB_OK invoke GlobalFree, addr buffer invoke ExitProcess, 0 end start
هل تطبيقي لها صحيح ؟ رجاء أن يؤكدّ لي شخص على صحّة ماقمت به, علماً أنه يعمل وﻻيظهر لي أخطاء. لكنني لست متأكّد من صحّة إستخدام الدالة GlobalAlloc.
أيضاً في حال مررت المعامل GMEM_FIXED للدالة GlobalAlloc , هل هذا يعني أنه لا يمكننا عمل realloc للذاكرة المحجوزة ؟ ﻻ أظنني أفهم ماكُتب بعدما قرأت شرح
المعامل GMEM_MOVEABLE.
سؤال جانبي, هل يعرف أحد مصدر توجد به أمثله على API ويندوز؟ كل ما أجده في msdn.microsoft.com تعريفات للدوال ونظرة عامة.