· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Можно ли в C написать DlgProc чтоб код был с одним ret(максимум двумя)..

<< . 1 . 2 . 3 .

Посл.отвђт Сообщенiе


Дата: Окт 5, 2004 07:09:45 · Поправил: Asterix

q_q

> Заблуждаешься. default не является обязательной опцией оператора switch.

Я знаю.

Ты считаешь правильно что после
SendMessage(hwnd, WM_CLOSE, 0, 0);
         break;

попадаем на return FALSE, вместо TRUE?
.text:004010BE 8B 45 10                                      mov     eax, [ebp+arg_8]
.text:004010C1 25 FF FF 00 00                                and     eax, 0FFFFh
.text:004010C6 89 45 F4                                      mov     [ebp+var_C], eax
.text:004010C9 81 7D F4 CA 00 00 00                          cmp     [ebp+var_C], 0CAh
.text:004010D0 74 02                                         jz      short loc_4010D4
.text:004010D2 EB 10                                         jmp     short loc_4010E4
.text:004010D4                               ; ---------------------------------------------------------------------- -----
.text:004010D4                               
.text:004010D4                               loc_4010D4:                             ; CODE XREF: DialogFunc+A1j
.text:004010D4 6A 00                                         push    0               ; lParam
.text:004010D6 6A 00                                         push    0               ; wParam
.text:004010D8 6A 10                                         push    WM_CLOSE        ; Msg
.text:004010DA 8B 4D 08                                      mov     ecx, [ebp+hWnd]
.text:004010DD 51                                            push    ecx             ; hWnd
.text:004010DE FF 15 18 20 40 00                             call    ds:SendMessageA
.text:004010E4                               
.text:004010E4                               loc_4010E4:                             ; CODE XREF: DialogFunc+2Bj
.text:004010E4                                                                       ; DialogFunc+A3j
.text:004010E4 C7 45 FC 00 00 00 00                          mov     [ebp+var_4], 0
.text:004010EB                               
.text:004010EB                               loc_4010EB:                             ; CODE XREF: DialogFunc+7Fj
.text:004010EB                                                                       ; DialogFunc+8Dj
.text:004010EB 8B 45 FC                                      mov     eax, [ebp+var_4]
.text:004010EE 8B E5                                         mov     esp, ebp
.text:004010F0 5D                                            pop     ebp
.text:004010F1 C2 10 00                                      retn    10h
.text:004010F1                               DialogFunc      endp


Дата: Окт 5, 2004 07:11:52

Quantum
Получил!!! И уже ответил.

Спасибо! Получил только что :-), ещё не смотрел.


Дата: Окт 5, 2004 07:52:54

Asterix
Теперь понял. Действительно ошибся. Надо добавлять default с FALSE и break перед вторым default'ом.


Дата: Окт 6, 2004 01:48:01

q_q
Т.е. вот так:
      case IDB_EXIT:
         SendMessage(hwnd, WM_CLOSE, 0, 0);
         break;
      default:
         r = FALSE;
     }
      break;
   default:
      r = FALSE;
  }
  return r;
}

Не могу сказать что получилось очень понятно, да и код генерит странный..
.text:004010EA 6A 00                                         push    0               ; lParam
.text:004010EC 6A 00                                         push    0               ; wParam
.text:004010EE 6A 10                                         push    WM_CLOSE        ; Msg
.text:004010F0 8B 4D 08                                      mov     ecx, [ebp+hWnd]
.text:004010F3 51                                            push    ecx             ; hWnd
.text:004010F4 FF 15 18 20 40 00                             call    ds:SendMessageA
.text:004010FA EB 07                                         jmp     short loc_401103
.text:004010FC                               ; ---------------------------------------------------------------------- -----
.text:004010FC                               
.text:004010FC                               loc_4010FC:                             ; CODE XREF: DialogFunc+B5j
.text:004010FC C7 45 FC 00 00 00 00                          mov     [ebp+r], 0
.text:00401103                               
.text:00401103                               loc_401103:                             ; CODE XREF: DialogFunc+B7j
.text:00401103                                                                       ; DialogFunc+B9j ...
.text:00401103 EB 07                                         jmp     short loc_40110C
.text:00401105                               ; ---------------------------------------------------------------------- -----
.text:00401105                               
.text:00401105                               loc_401105:                             ; CODE XREF: DialogFunc+2Bj
.text:00401105 C7 45 FC 00 00 00 00                          mov     [ebp+r], 0
.text:0040110C                               
.text:0040110C                               loc_40110C:                             ; CODE XREF: DialogFunc+7Fj
.text:0040110C                                                                       ; DialogFunc+8Dj ...
.text:0040110C 8B 45 FC                                      mov     eax, [ebp+r]
.text:0040110F 8B E5                                         mov     esp, ebp
.text:00401111 5D                                            pop     ebp
.text:00401112 C2 10 00                                      retn    10h
.text:00401112                               DialogFunc      endp


Дата: Окт 6, 2004 05:46:50

Asterix
Т.е. вот так
Да.

Не могу сказать что получилось очень понятно, да и код генерит странный..
Что конкретно не понятно и странно? Если не оптимально, то я предупреждал - если хочешь писать на Си, то прекращай мыслить как программист на ассемблере - утонешь в оптимизации.

<< . 1 . 2 . 3 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.081