Добрый день, у мен есть код программки вот такой: Код (Text): .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 include c:\masm32\include\wsock32.inc include c:\masm32\include\comctl32.inc includelib c:\masm32\lib\user32.lib includelib c:\masm32\lib\kernel32.lib includelib c:\masm32\lib\comctl32.lib ; подключение библиотеки common controls includelib c:\masm32\lib\wsock32.lib .data wsaError db "CONNECTED!",0 NProg db "CONNECTED!",0 hSocket1 dd ? hSocket2 dd ? Port dd 3030 Connected db 0 scriptrqst1 db "1",0 scriptrqst2 db "2",0 number1 db "123",0 number2 db "321",0 filehandle dd ? bytecount dd ? sizetoread dd 0 buffer dd 0 actual_data_read dd 0 mHandle dd 0 hMemory dd 0 wsa WSADATA <?>; структура данных для сети...cм. windows.inc sin sockaddr_in <?> ; -.-.- .const ; ######################################################################### ; опpеделяем дополнительное Windows-сообщение (любой номер от WM_USER и выше) WM_SOCKET equ WM_USER + 100 AF_INET equ 2 ; интернет (используется чаще всего) SOCK_STREAM equ 1 ; Тип соединения ; ######################################################################### .code ; макрос - обнуляет старшее слово в DWORD (eax), оставляя младшее... LOWORD MACRO bigword mov eax, bigword and eax, 0FFFFh ENDM ; макрос - сдвигает старшее слово в DWORD (eax) в младшие разряды (ax)... HIWORD MACRO bigword mov eax, bigword shr eax, 16 ENDM start: invoke WSAStartup, 101h, addr wsa ; инициализация WINSOCK DLL v1.1 invoke socket, AF_INET, SOCK_STREAM,0 ; тип протокола (не устанавливать никакого пpотокола: 0) .if eax != INVALID_SOCKET ; если нет ошибки mov hSocket1, eax ; запомнить хендл .else invoke MessageBox, NULL, addr wsaError, addr NProg, MB_OK + MB_ICONSTOP .endif invoke htons, Port mov sin.sin_port, ax mov sin.sin_family, AF_INET mov sin.sin_addr, INADDR_ANY invoke bind, hSocket1, addr sin, sizeof sin .if eax == SOCKET_ERROR invoke MessageBox, NULL, addr wsaError, addr NProg, MB_OK + MB_ICONSTOP .endif invoke listen, hSocket1, 5 .if eax == SOCKET_ERROR invoke MessageBox, NULL, addr wsaError, addr NProg, MB_OK + MB_ICONSTOP .endif .while Connected != 1 .IF ax == NULL invoke accept,hSocket1,0,0 mov hSocket2, eax invoke Sleep, 1000d invoke ioctlsocket,hSocket2,FIONREAD,addr sizetoread .IF eax==NULL invoke GlobalAlloc,GMEM_FIXED,sizetoread ; Выделяем память для буфера считываемых данных mov mHandle,eax invoke GlobalLock,eax mov buffer,eax invoke recv,hSocket2,buffer,sizetoread,0 ; считываем данные с сокета invoke Sleep, 1000d mov actual_data_read, eax .IF actual_data_read == 0 ;если нихуя не прочиталось ;invoke MessageBox, NULL, addr wsaError, addr NProg, MB_OK + MB_ICONSTOP invoke closesocket, hSocket1 invoke closesocket, hSocket2 invoke WSACleanup .ENDIF mov eax, buffer add eax, sizetoread mov edx,0 mov [eax],edx add sizetoread,1 invoke lstrcmpi, buffer, addr scriptrqst1 .IF eax==0 invoke MessageBox, NULL,addr number1, addr NProg, MB_OK + MB_ICONSTOP .ELSEIF invoke lstrcmpi,buffer , addr scriptrqst2 .IF eax==0 invoke MessageBox, NULL,addr number2, addr NProg, MB_OK + MB_ICONSTOP .ENDIF .ENDIF ;invoke MessageBox, NULL, buffer, addr NProg, MB_OK + MB_ICONSTOP invoke GlobalUnlock, buffer invoke GlobalFree, hMemory .ENDIF .ENDIF invoke Sleep,10 mov Connected, 1 .endw invoke closesocket, hSocket1 invoke closesocket, hSocket2 invoke WSACleanup invoke ExitProcess, 0 end start Но я хочу его воткнуть в программу другую, точнее описать там, как процесс(ServerThread proc). И я столкнулся с проблемой при переходе к локальным переменным. C необъявленными переменными это,как я понял, LOCAL hSocket2WORD в таком стиле, с константами это Port equ 3030 вот так, а вот со строками засада в том, что при использование числовых строк с TEXTEQU компилятор выдаёт ошибку, что мол надо использовать текст. Вот такая проблема. Да, если их всё таки объявить, то длина их вычисляется через sizeof и указатель , как и с обычными строками через offset? И как их нульдетерминированными сделать? Спасибо!