Ребят,вот создаю окно и компонент edit.А как мне сделать, что-бы тект из edit выводился в MessageBox?Вот код: Code: .386 .model flat,stdcall option casemap:none include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\kernel32.inc include C:\masm32\include\gdi32.inc include C:\masm32\include\comdlg32.inc include C:\masm32\include\shell32.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib includelib C:\masm32\lib\gdi32.lib includelib C:\masm32\lib\comdlg32.lib includelib C:\masm32\lib\shell32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD RGB macro red,green,blue xor eax,eax mov ah,blue shl eax,8 mov ah,green mov al,red endm szText MACRO Name,Text:VARARG LOCAL lbl jmp lbl Name db Text,0 lbl: ENDM .const edit1ID equ 1 button1ID equ 2 .data? hFontN HWND ? hwndedit1 HWND ? hwndbutton1 HWND ? hInstance HINSTANCE ? CommandLine LPSTR ? .data FontName db "MS Sans Serif",0 lf LOGFONT <> Textedit1 db "Edit1",0 Textbutton1 db "Button1",0 ;_______________ ClassName db "MASM Builder",0 BtnClName db "button",0 StatClName db "static",0 EditClName db "edit",0 LboxClName db "listbox",0 CboxClName db "combobox",0 ReditClName db "richedit",0 RichEditLib db "riched32.dll",0 Caption db "Form",0 ;_______________ .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke GetCommandLine invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc :WNDCLASSEX LOCAL msg :MSG LOCAL hwnd :HWND mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style,CS_BYTEALIGNCLIENT mov wc.lpfnWndProc,offset WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInst pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 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,0,ADDR ClassName,ADDR Caption,WS_SYSMENU or WS_MINIMIZEBOX,380,75,315,200,0,0,hInst,0 mov hwnd,eax INVOKE ShowWindow,hwnd,SW_SHOWNORMAL INVOKE UpdateWindow,hwnd .WHILE TRUE invoke GetMessage,ADDR msg,0,0,0 .BREAK .IF (!eax) invoke TranslateMessage,ADDR msg invoke DispatchMessage,ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM .IF uMsg == WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg == WM_CREATE invoke lstrcpy,addr lf.lfFaceName,addr FontName mov lf.lfHeight,-11 mov lf.lfWeight,500 invoke CreateFontIndirect,addr lf mov hFontN,eax invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR EditClName,ADDR Textedit1,WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_VISIBLE,152,48,121,21,hWnd,edit1ID,hInstance,0 mov hwndedit1,eax invoke SendMessage,hwndedit1,WM_SETFONT,hFontN,1 invoke CreateWindowEx,0,ADDR BtnClName,ADDR Textbutton1,WS_CHILD or BS_DEFPUSHBUTTON or WS_VISIBLE,32,48,75,25,hWnd,button1ID,hInstance,0 mov hwndbutton1,eax invoke SendMessage,hwndbutton1,WM_SETFONT,hFontN,1 .ELSEIF uMsg == WM_COMMAND mov eax,wParam .IF lParam != 0 .IF ax == button1ID shr eax,16 .IF ax == BN_CLICKED invoke MessageBox,hWnd,addr Textedit1,0,MB_ICONINFORMATION .ENDIF .ENDIF .ENDIF; .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start У меня выводится только edit1.А мне надо,что-бы выводилось то, что я написал в edit!
Народ,а как можно с помощью winsock сделать так,что бы сервер отправлял данные клиенту? Можно ли вообще так?
MTV (На MASM) Как то так. .DATA sMsg db "Сообщение",0 .DATA ? buffer db 512 dup(?) .IF ax==IDM_GETTEXT invoke GetWindowText,hwndedit1, ADDR buffer,512 invoke MessageBox,NULL,ADDR buffer,ADDR sMsg,MB_OK+MB_ICONINFORMATION ...
В winsock есть такая функция называется Send =))) Вот глянь сюда: http://mysystem.ucoz.ru/publ/masm/rabota_s_protokolom_socks5_na_masm/4-1-0-52 .
есть пара вопросов по masm: 1. как инициализирвоать массив при объявлении? например в си вот так делается: Code: unsigned char dump[]={ 0x01 ,0x02 ,0x03 ,0x04,0x05, 0x06,0x07,0x08,0x09, 0x0A, 0x0B,0x0C, 0x0D,0x0E,0x0f} как такое же сделать на асме? или можно только задавать начальное значение всех элементов при объявлении? вот так: Code: .DATA ... ololo DWORD 1024 dup(начальное_значение) ... .CODE .... 2. расскажите поподробнее про подпрограммы в masm, а именно - про вершину стека, т.е. что нужно писать после оператора RET, чтобы корректно выйти из подрограммы, надо ли чтото делать с регистром еsp при вызове функции через оператор call и т.д. - про возврат значения. т.е. как корректно возвратить значение из подпрограммы: просто поместить его в eax?
Code: .data ololo dd 1,2,3,4,5 Так, как ты написал, тоже можно. После оператора ret ничего не надо писать. Вопрос про esp и call мутный, потому что все зависит от того, какую процедуру ты вызываешь, какое у нее соглашение вызовов. Вопрос про возврат значения - да, поместить в eax. Хотя если ты собираешься писать собственные процедуры, ничего не мешает тебе отказаться от общепринятых соглашений вызовов и возвращать значение в других регистрах или вообще в стеке.
А кто подскажет как сделать вывод текста в memo.Наример,создал форму с memo потом получаю инфу и вывожу в memo?Какая функция обнавляет memo?
Есть код DLL экспортирующий одну функцию. Как его вызвать с прогии ? Вот код DLL: ; ====================================================== include \masm32\include\masm32rt.inc include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\shell32.inc include \masm32\include\advapi32.inc include \masm32\macros\macros.asm includelib \masm32\lib\user32.lib includelib \masm32\lib\shell32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\advapi32.lib ;======================================================== include c:\masm32\macros\macros.asm ;======================================================== szText MACRO Name, Text:VARARG LOCAL lbl jmp lbl Name db Text,0 lbl: ENDM .data AppName db "DLL",0 LoadMsg db "Библиотека MyDLL.dll загружена",0 UnloadMsg db "Библиотека MyDLL.dll выгружена",0 .data? hInstance dd ? hSnapshot HANDLE ? ProcEnt PROCESSENTRY32 <?> pi PROCESS_INFORMATION <> sinf STARTUPINFO <> .code ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« LibMain proc instanceWORD,reasonWORD,unusedWORD .if reason == DLL_PROCESS_ATTACH mrm hInstance, instance mov eax, TRUE invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK .elseif reason == DLL_PROCESS_DETACH invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK .endif ret LibMain endp ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« MyLibProc proc ENameWORD invoke CreateProcess,NULL,ADDR EName,NULL,NULL,FALSE,0,NULL,NULL,addr sinf,addr pi mov esi,pi.hProcess invoke WaitForSingleObject,esi,INFINITE ret MyLibProc endp ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««« Вот приложение но не знаю как все это организовать: .486 .model flat,stdcall option casemap:none ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ; ПОДКЛЮЧАЕМЫЕ МОДУЛИ ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib .data LibName db "mydll.dll",0 FunctionName db "MyLibProc",0 DllNotFound db "Библиотека mydll.dll не может быть загружена",0 AppName db "Загрузка библиотеки mydll.dll",0 FunctionNotFound db "Запущена функция из библиотеки mydll.dll",0 .data? hLib dd ? TestDLLAddr dd ? .code start: invoke LoadLibrary,addr LibName .if eax==NULL invoke MessageBox,NULL,addr DllNotFound,addr AppName,MB_OK .else mov hLib,eax invoke GetProcAddress,hLib,addr FunctionName .if eax==NULL invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK .else ;========================================================================= ;=========================Что здесь дальше делать ? ====================== ;========================================================================= .endif invoke FreeLibrary,hLib .endif invoke ExitProcess,NULL end start =========================================================
указатель чего ? Делаю так но выдает ту же ошибку: .486 .model flat,stdcall option casemap:none include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\kernel32.inc includelib C:\masm32\lib\kernel32.lib includelib C:\masm32\lib\user32.lib .data LibName db "mydll.dll",0 FunctionName db "MyLibProc",0 DllNotFound db "Библиотека mydll.dll не может быть загружена",0 AppName db "Загрузка библиотеки mydll.dll",0 FunctionNotFound db "Запущена функция из библиотеки mydll.dll",0 EName db "notepad.exe",0 .data? hLib dd ? TestDLLAddr dd ? .code start: invoke LoadLibrary,addr LibName .if eax==NULL invoke MessageBox,NULL,addr DllNotFound,addr AppName,MB_OK .else mov hLib,eax ;invoke GetProcAddress,hLib,addr FunctionName .if eax==NULL invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK .else =============================== =============================== mov TestDLLAddr,eax push offset EName Call TestDLLAddr =============================== =============================== .endif invoke FreeLibrary,hLib .endif invoke ExitProcess,NULL end start ==============================================
Что-то я не до конца разобрался с memo.Вот я получаю инфу в переменную и с помощью SetWindowText,хочу что-бы она вывелась в memo.Но нечего не получается(Правильно ли я делаю?
Погоди, я постараюсь наладить телепатическую связь...... ..... нет, не получается, абонент не доступен... Извини...