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

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

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

> Помогите найти ошибку!, API-function GetNetworkParams
c00p3r
сообщение 3.01.2007 18:31
Сообщение #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

 

- Текстовая версия 27.07.2025 23:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"