IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Помогите найти ошибку!, API-function GetNetworkParams
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Уважаемые мастера АСМ! Не получается одна весчь - прошу у вас помощи...
Вообщем, мне надо вывести информацию из структуры FIXED_INFO из функции GetNetworkParams.
Вот что я написал:

.386
.model flat,stdcall

option casemap:none
include 'c:/masm32/include/windows.inc'
include 'c:/masm32/include/user32.inc'
includelib 'c:/masm32/lib/user32.lib' ; calls to functions in user32.lib and kernel32.lib
include 'c:/masm32/include/kernel32.inc'
includelib 'c:/masm32/lib/kernel32.lib'
includelib 'c:/masm32/lib/iphlpapi.lib'


FIXED_INFO STRUC
HostName DWORD ?
FIXED_INFO ENDS

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
GetNetworkParams proto :FIXED_INFO,:DWORD

;==================================
;##############################################################
.DATA ; initialized data

ClassName db 'SimpleWinClass',0; Имя нашего класса окна
AppName db 'Our First Window',0; Имя нашего окна
MsgBoxCaption db 'Shutdowning... Say Goodbye to ur OS!',0
MsgBoxText db 'Hands?',0

;################################################################

.DATA? ; Hеиницилизируемые данные
hInstance HINSTANCE ? ; Хэндл нашей программы
CommandLine LPSTR ?
fi FIXED_INFO <?>
lLen DWORD ?
;#############################################################

.CODE ; Здесь начинается наш код
start:
invoke GetModuleHandle, NULL; Взять хэндл программы
; Под Win32, hmodule==hinstance mov hInstance,eax
mov hInstance,eax

invoke GetCommandLine ; Взять командную строку. Вы не обязаны
;вызывать эту функцию ЕСЛИ ваша программа не обрабатывает командную строку.
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT ; вызвать основную функцию
invoke ExitProcess, eax; Выйти из программы.
; Возвращаемое значение, помещаемое в eax, берется из WinMain'а.
;###################################################
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX ; создание локальных переменных в стеке
LOCAL msg:MSG
LOCAL hwnd:HWND


mov wc.cbSize,SIZEOF WNDCLASSEX ; заполнение структуры wc
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL

mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1

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 AppName,WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst,NULL
mov hwnd,eax

invoke ShowWindow, hwnd,CmdShow; отобразить наше окно на десктопе
invoke UpdateWindow, hwnd; обновить клиентскую область

.WHILE TRUE ; Enter message loop
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)

invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam; сохранение возвращаемого значения в eax
ret

WinMain endp
;##############################################################
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.IF uMsg==WM_CLOSE ; если пользователь закрывает окно
invoke PostQuitMessage,NULL; выходим из программы

.ELSEIF uMsg==WM_LBUTTONDOWN
invoke GetNetworkParams, fi, NULL
mov lLen, eax
invoke GetNetworkParams, fi, lLen
invoke MessageBox, hWnd, offset fi.HostName,offset MsgBoxCaption , MB_OK
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam; Дефаултная функция обработки окна
ret
.ENDIF
xor eax,eax

ret
WndProc endp


end start



Но у меня выводит пустой мессджбокс.. Если есть возможность - прошу помочь, и просьба - показать как вывести несколько полей из структуры в один мессджбокс %)
Спасибо, всех с НГ!

Ах да, я использовал Iphlpapi.lib, которую можно скачать с gign4.narod.ru/Iphlpapi.lib
Ссылка на структуру и функцию - MSDN -> GetNetworkParams
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.05.2021 11:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name