- 追加された行はこの色です。
- 削除された行はこの色です。
* インライン関数展開 [#gebded62]
-ページ: [[Develop]]
-投稿者: [[novice]]
-優先順位: 低
-状態: 提案
-カテゴリー: 覚え書き
-投稿日: 2012-02-04 (土) 16:23:45
-バージョン:
** メッセージ [#k8b0949a]
インライン関数の展開で同じコードが生成されると思ったが同じにならなかった。
CDlgAbout.cpp, m_hWndに直接アクセスする場合
m_hWnd(DWORD PTR [ecx+12])をそのままpushしている。
#code(c){{
; 257 : }
; 258 : return CDialog::OnBnClicked( wID );
jmp ?OnBnClicked@CDialog@@UAEHH@Z ; CDialog::OnBnClicked
$LN1@OnBnClicke:
push ebx
push esi
push edi
; 249 : case IDC_BUTTON_COPY:
; 250 : {
; 251 : HWND hwndEditVer = GetDlgItem( m_hWnd, IDC_EDIT_VER );
push 1126 ; 00000466H
push DWORD PTR [ecx+12]
call DWORD PTR __imp__GetDlgItem@8
; 252 : ::SendMessage( hwndEditVer, EM_SETSEL, 0, -1 );
mov esi, DWORD PTR __imp__SendMessageA@16
push -1
push 0
mov ebx, 177 ; 000000b1H
mov edi, eax
push ebx
push edi
call esi
}}
CDlgAbout.cpp, GetHwnd()関数経由でアクセスする場合
eaxレジスタにm_hWnd(DWORD PTR [ecx+12])を代入してからpushしている。
#code(c){{
; 257 : }
; 258 : return CDialog::OnBnClicked( wID );
jmp ?OnBnClicked@CDialog@@UAEHH@Z ; CDialog::OnBnClicked
$LN1@OnBnClicke:
; 249 : case IDC_BUTTON_COPY:
; 250 : {
; 251 : HWND hwndEditVer = GetDlgItem( GetHwnd(), IDC_EDIT_VER );
mov eax, DWORD PTR [ecx+12]
push ebx
push esi
push edi
push 1126 ; 00000466H
push eax
call DWORD PTR __imp__GetDlgItem@8
; 252 : ::SendMessage( hwndEditVer, EM_SETSEL, 0, -1 );
mov esi, DWORD PTR __imp__SendMessageA@16
push -1
push 0
mov ebx, 177 ; 000000b1H
mov edi, eax
push ebx
push edi
call esi
}}
----
#comment
#attach