• 0
Monster1

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

سؤال

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

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

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

كود

.386.model flat,stdcalloption casemap:noneincludelib C:\masm32\lib\kernel32.libincludelib C:\masm32\lib\user32.libinclude C:\masm32\include\kernel32.incinclude C:\masm32\include\user32.incinclude C:\masm32\include\windows.incWndProc PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORDWinMain PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORD.data AppTitle db "Window Application",0ClassName db "ClassName",0.data?hInstance dd ?.codemain:	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 endpend main

و شكرا مسبقا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

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

 

mov wc.lpfnWndProc, WndProc

 

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

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا اخي

Mr.B

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .