الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تصميم واجهة برنامج بالاسمبلي و دوال الAPI

بدأه Monster1 في 12 مايو 2014 · 2 رد · 1,995 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته 

انا جديد في الاسمبلي و قد صممت هدا البرنامج و بعد تجميع لا يعمل البرنامج

فأرجو من الاخوان ان يدلوني على الخطأ ادا كان في الكود

كود

.386
.model flat,stdcall
option casemap:none

includelib C:\masm32\lib\kernel32.lib
includelib C:\masm32\lib\user32.lib

include C:\masm32\include\kernel32.inc
include C:\masm32\include\user32.inc
include C:\masm32\include\windows.inc

WndProc PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORD
WinMain PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORD

.data 
AppTitle db "Window Application",0
ClassName db "ClassName",0

.data?
hInstance dd ?

.code
main:
	invoke GetModuleHandle,NULL
	mov hInstance,eax
	invoke WinMain, hInstance,NULL, NULL,SW_SHOW
	invoke ExitProcess, NULL
 
 WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
	LOCAL wc:WNDCLASSEX
	LOCAL msg:MSG
	LOCAL hwnd:DWORD
	
	mov wc.cbSize, SIZEOF WNDCLASSEX
	mov wc.cbClsExtra,NULL
	mov wc.cbWndExtra,NULL
	mov wc.style,CS_VREDRAW or CS_HREDRAW
	push hInst
	pop wc.hInstance
	mov wc.hbrBackground,COLOR_WINDOW
	mov wc.lpszMenuName,NULL
	mov wc.lpszClassName, OFFSET ClassName
	invoke LoadIcon, NULL, IDI_APPLICATION
	mov wc.hIcon,eax
	mov wc.hIconSm,eax
	invoke LoadCursor,NULL, IDC_ARROW
	mov wc.hCursor,eax
	
	invoke RegisterClassEx, ADDR wc
	
	invoke CreateWindowEx,NULL,ADDR ClassName, ADDR AppTitle,WS_TILEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,NULL,NULL,hInst,NULL
	
	mov hwnd,eax
	
	invoke ShowWindow,hwnd,SW_SHOWNORMAL
	invoke UpdateWindow,hwnd
	
	.WHILE TRUE
		invoke GetMessage,ADDR msg,NULL,0,0
		.BREAK .IF(!eax)
			invoke TranslateMessage,ADDR msg
			invoke DispatchMessage, ADDR msg
	.ENDW
	mov eax,msg.wParam
	ret
 WinMain endp
 WndProc proc hwnd:DWORD, msg:DWORD, wParam:DWORD, lParam:DWORD
	mov eax,msg
	.IF eax == WM_CREATE
		invoke MessageBox,NULL,ADDR AppTitle, ADDR AppTitle,NULL
	.ELSEIF eax ==	WM_DESTROY
		invoke PostQuitMessage,NULL
	.ELSE
		invoke DefWindowProc,hwnd,msg,wParam,lParam
	.ENDIF
	ret
 WndProc endp
end main

و شكرا مسبقا

#2

في برنامجك نسيت أن تهيئ قيمة WNDCLASSEX.lpfnWndProc لما كنت تجهز البنية wc:

 

mov wc.lpfnWndProc, WndProc

 

المصدر الذي تتعلم منه الأسبملي يعلمك الـwin32 api وليس الأسمبلي إلا إذا كان هذا ماتريده. لاتحتاج الأسمبلي كي تستخدم الـwin32 api، يمكنك استخدام c/c++ بدل اضاعة الجهد مع الأسمبلي..

2
#3

شكرا اخي

Mr.B

بالنسبة للبرمجة win32 api بال C/C++ فأنا اريد تعلم البرمجة بالassembly والكتاب الدي اعتمده, توجه مباشرة الى win32 api بالاسمبلي فهل هدا منهج صحيح

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…