忍者ブログ
趣味+メモ用のブログです。 GNU/Linux関連、OSS関連情報、調査事項になるでしょうが、何を書くか分かりません。
[1] [2] [3] [4] [5] [6] [7]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

またまた、サクラエディタを修正。
サクラエディタ1.6.5にて、パッチをパワーアップして適用していただいた。
(http://sakura.qp.land.to/?FAQ%2F47)

が、以下の2点の問題が残っている。
1)スクロール時に表示が乱れる。(1行目が画面更新されない)
2)日本語入力時に入力確定時に文字が取り消されることがある。


1)スクロール時に表示が乱れる。については、暫定修正版を作成 (ぱちぱちぱち!!)

http://sakaihdt.gozaru.jp/sakura.html

どうも、ScrollAtV関数内で使用されている、
「::InvalidateRect( m_hWnd, NULL, TRUE );」が
正常に動作していないように思える。

ここの部分を修正してもなおらなかったのだが、
ScrollAtVを呼び出している外の関数で、
画面のリドロウ(RedrawAll()  もしくは、OnPaint()関数)
を呼び出すことで回避できたのだが、
処理速度が非常に重い気がする・・・・・

もう少し調査が必要。


っていうか、Wine側調査しなくっちゃ!!

PR
linux-2.6.31.1 をコンパイルしてみるが、
途中でエラー!?

Debian GNU/Linux 5.0.3
gcc (Debian 4.3.2-1.1)

make[1]: ディレクトリ `/home/sakaihdt/kernel/linux-2.6.31.1/Documentation/lguest' に入ります
cc -m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE    lguest.c   -o lguest
lguest.c:21:25: error: sys/eventfd.h: そのようなファイルやディレクトリはありません
lguest.c: In function ‘create_thread’:
lguest.c:1021: warning: implicit declaration of function ‘eventfd’
make[1]: *** [lguest] エラー 1
make[1]: ディレクトリ `/home/sakaihdt/kernel/linux-2.6.31.1/Documentation/lguest' から出ます
make: *** [debian/stamp/build/kernel] エラー 2

だそうだ。
とりあえず、ソースを直してみる。


ま、とりあえず、ヘッダのインクルードを削除!!



Documents/guest/lguest.c:21:25:  // #include <sys/eventfd.h>

うまくとおりました!!

ってそんなもん?!

デビアンのKDEで日本語入力ができなかった
qtアプリのみ入力できないんで、しらべてみたところ
以下のブログに解決法あり!!

http://d.hatena.ne.jp/hidepon_mory/20090827/1251363233


解決方法として、uim-qtuim-ximをインストールする。

とのこと
えいや!!でいれちゃう!!

apt-get install uim-qt uim-xim

Let's note R8に debian GNU/Linux lennyをインストール

通常インストール後、
kernel 2.6.30-1をセルフコンパイル。

Intel Wifi Link 5100 がカーネル 2.6.27-6以降でサポートらしく、
lennyのデフォルトカーネル 2.6.26では未対応。

ファームウェアについては、以下のページからダウンロード
http://www.intellinuxwireless.org/?n=downloads
iwlwifi-5000-ucode-8.24.2.12.tgz

/lib/firmware に解凍したファイルを配置。


あと、音関連も少々いじった。
参照URLどこだっけかな
さあWINE側の調査開始。

windowハンドルは OK
とのことなので、

dlls/user32/win.c を参照してみる。

  97  */
  98 static WND *create_window_handle( HWND parent, HWND owner, LPCWSTR name,
  99                                   HINSTANCE instance, BOOL unicode )
 100 {

135     if (!(win = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
 136                            sizeof(WND) + extra_bytes - sizeof(win->wExtra)      )))


ここか?

HeepAlloc()関数をググってみる。
http://msdn.microsoft.com/ja-jp/library/cc430107.aspx

hHeap
[入力]割り当てたいヒープのハンドルを指定します。 HeapCreate 関数または GetProcessHeap 関数が、このハンドルを返します。
とのこと、
GetProcessHeap関数を呼べばいいのか?

ってわけで、resource.cで呼び出している箇所を、
(global16.c)を書き換えてみたんだけど、だめだね、

リンクできない。

やっぱり16はだめなのか?

さいちゃれんじだ!!







さて状況整理、状況整理。

だれにも紹介したつもりないけれど、
だれかみてるのかしら、このブログ。

どうせ、ログばっかりだしね。

(1) Wine側の対応

結局 Accelarator Tableが、Wineではちゃんと実装されていないことが
原因のよう。

http://bugs.winehq.org/show_bug.cgi?id=19368
Dmitry Timoshkov氏より返信
=============================================
> I seem " Windows has Accelarator Table in Shared Memory "
> But Wine has Accelarator Table in HeepArea.
> ( dlls/user32/resource.c CreateAcceleratorTableA() use
> GlobalAlloc16 function .)
In Windows an accelerator is a user32 kernel object, like windows and menus, and an accelerator created in one process is visible to another one. Wine implements this only for window handles. ============================================= 直す予定もなさそう。 10月以降にちょろちょろとみていくとしますか。。。 (2) サクラエディタ側 修正パッチを取り込んでくれる模様。 zlibライセンスって初めて知ったなぁ。 個人的にはGPL派だけど、郷には入れば郷にしたがえだからね。 http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=dev <5587> Wineでの動作について(修正) さて、仕事しますか。。。。 いやだなぁ。。。



やっと直せた。

●バイナリイメージと修正ソースを以下においておきます。
http://sakaihdt.gozaru.jp/sakura.html


結局、サクラエディタの10行程度の修正で済みました。

●原因について(修正した箇所)
サクラエディタでは、Accelaratorテーブル(ショートカットテーブル)を
共有メモリに入れていたのですが、
TranslateAccelerator()呼び出し時に、
(Wineでは)既に有効になっていないようです。

修正は、Accelaratorテーブルを共有メモリでなく、
TranslateAccelerator()関数を呼び出している関数の
ローカル変数として作成することで対応しました。

WineとWindowsのAccelaratorテーブルのもちかたが
違っている為だと考えられます。


とりあえず、Wine側とサクラ側に連絡するとしますか・・・・


さらにチャレンジ!!

> ● Windowz7上での呼び出し階層
> CEditWndProc() hwnd:132848 uMsg:273 wParam:65574 iParam:0
> DispatchEvent() hwnd:132848 uMsg:273 wParam:65574 iParam:0
> CEditWnd::OnCommand() wNotifyCode=1
> CEditWnd::OnCommand()  nFuncCode=30311
> [d:\project\sakuraeditor\trunk\sakura_core\ceditview_command.cpp:344] debug sakai F_UP
> OnPaint(28,96)-(925,97) : 1
>
> となっており、最終的に「WNDCLASSEX 」クラスの
> 「lpfnWndProc(コールバック)」までたどりつくのです。

までは分かっているのですが、その先の調査です。

メインのループの中で、GetMessage()関数でまずメッセージを受け取っています。
(sakuraeditor CEditWnd.cpp:MessageLoop()関数内)

じゃぁここでトラップしてやったらどうかと思い修正。

-------------------------------------------

//複数プロセス版
/* メッセージループ */
void CEditWnd::MessageLoop( void )
{
    MSG    msg;
    int ret;
   
    //2004.02.17 Moca GetMessageのエラーチェック
    while ( NULL != m_hWnd && ( ret = GetMessage( &msg, NULL, 0, 0 ) ) ){
        if( ret == -1 ){
            break;
        }



//@@@ 2002.01.14 YAZAKI 印刷プレビューをCPrintPreviewに独立させたことによる変更
        if( m_pPrintPreview && NULL != m_pPrintPreview->GetPrintPreviewBarHANDLE() && ::IsDialogMessage( m_pPrintPreview->GetPrintPreviewBarHANDLE(), &msg ) ){    /* 印刷プレビュー 操作バー */
        }else
        if( NULL != m_cEditDoc.m_cDlgFind.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgFind.m_hWnd, &msg ) ){    /* 「検索」ダイアログ */
        }else
        if( NULL != m_cEditDoc.m_cDlgFuncList.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgFuncList.m_hWnd, &msg ) ){    /* 「アウトライン」ダイアログ */
        }else
        if( NULL != m_cEditDoc.m_cDlgReplace.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgReplace.m_hWnd, &msg ) ){    /* 「置換」ダイアログ */
        }else
        if( NULL != m_cEditDoc.m_cDlgGrep.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgGrep.m_hWnd, &msg ) ){    /* 「Grep」ダイアログ */
        }else
        if( NULL != m_cEditDoc.m_cHokanMgr.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cHokanMgr.m_hWnd, &msg ) ){    /* 「入力補完」 */
        }else
        if( NULL != m_hwndSearchBox && ::IsDialogMessage( m_hwndSearchBox, &msg ) ){    /* 「検索ボックス」 */
            ProcSearchBox( &msg );
        }else
        {

/* GetMessage後に則ってしまう!! */
if( msg.message == WM_KEYUP ){
    DispatchEvent( msg.hwnd, msg.message, msg.wParam, msg.lParam );

}else{
            if( NULL != m_pShareData->m_hAccel ){
                if( TranslateAccelerator( msg.hwnd, m_pShareData->m_hAccel, &msg ) ){
                }else{
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
            }else{
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
}
        }
    }
    return;
}
-------------------------------------------
でWindowsでは動くんだけど、Wineでは動かない。
だめ!!


切り口を変えて、なぜSakuraEditorで動かないか検討してみる。
× SakuraEditor
○ TeraPad
○ Notopad++
○ 秀丸エディター(検証はできていない)


○のエディターでソースがあるのは、notepad++のみ。
notepad++では、F3/F5/CTRL+Cなどのキーは、
アクセラレータを使用している模様。
※ SakuraEditorでは、WM_KEYUPを直接判断している。
(やじるしきーはわからない。。。。。)

これが違うの?

ちょっと WM_COMMANDのアクセラレータについて
調べる必要があるかしら????

参考URL:
http://www.geocities.jp/ky_webid/win32c/033.html

---------------------------------------------------
19:36追記
http://www.geocities.jp/ky_webid/win32c/025.html
のページをコンパイルしてwineで動かしてみた。
矢印キー、CTRL、BSなどがwineでも動作する、
Why?

sakuraeditorに戻って、ちょっとソースを修正。

●修正前
CEditWnd.cpp:MessageLoop()関数内
            if( NULL != m_pShareData->m_hAccel ){
                if( TranslateAccelerator( msg.hwnd, m_pShareData->m_hAccel, &msg ) ){
                }else{
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
            }else{
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
●修正後
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );

とすると、Windowsでも矢印キーなどが聞かない現象が発生。

つまり、「TranslateAccelerator」関数に何らかの問題がある?

これは継続調査の必要あり・・・







2chで質問してみたら、wine-develに聞いてみたら?ってことで、
wine-devel(bugzilla)に投稿した。

http://bugs.winehq.org/show_bug.cgi?id=19368

で、拙い英語ではありましたが、「Vitally Margolen」さんより返信
> The code looks soo bad it's impossible to see what it's doing and how it's
> doing it. It would be much easier for a dev from sakura-editor project to find
> the problem. Or at least point to exact place where they are expecting
> left/right/up/down arrow keys.
氏曰く、簡単に解決できそう?!


> The ctrl,shift,alt + hotkeys don't work because of bug 1348.
bug 1348をみてみぃ!!
→パッチがあったんで、1.1.26にマージしてみたんだけど、
だめだねぇ。落っこちてしまいます。


> > "sakura editor" catch Up/Down/Ctrl event from lpfnWndProc() callback.
> Where exactly? Which file? Which function?
これは、返信をいたしました。

●落っこちたときのコンソールログ
(パッチを当てた箇所で落ちている・・・・)
sakaihdt@ubuntu-prime ~/tools$  /usr/local/wine/bin/wine sakura.exe
sakaihdt@ubuntu-prime ~/tools$ fixme:keyboard:RegisterHotKey (0x10030,4660,0x00000003,90): stub
wine: Unhandled page fault on read access to 0x00000084 at address 0x7e48c483 (thread 001a), starting debugger...
First chance exception: page fault on read access to 0x00000084 in 32-bit code (0x7e48c483).
Register dump:
 CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
 EIP:7e48c483 ESP:003364bc EBP:00336504 EFLAGS:00010216(  R- --  I   -A-P- )
 EAX:00000000 EBX:7e4d5ff4 ECX:7e4d9dea EDX:00000000
 ESI:000000ff EDI:00000012
Stack dump:
0x003364bc:  00010030 00000000 00000000 b7f85ff4
0x003364cc:  00000000 00000001 00000001 b7e632b9
0x003364dc:  00000000 7ecded48 7ecad673 7ecad244
0x003364ec:  00000000 0000000c 00000034 7ecc0ff4
0x003364fc:  00000001 00000000 00336534 7ec41aea
0x0033650c:  00010030 00001234 00000003 0000005a
Backtrace:
=>0 0x7e48c483 X11DRV_RegisterHotKey+0x153(hwnd=0x10030, id=4660, modifiers=<is not available>, vk=90) [/home/sakaihdt/src/wine-1.1.26/build/dlls/winex11.drv/../../../dlls/winex11.drv/keyboard.c:2082] in winex11 (0x00336504)
  1 0x7ec41aea RegisterHotKey+0x5a(hwnd=0x10030, id=4660, modifiers=3, vk=90) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/input.c:877] in user32 (0x00336534)
  2 0x004126db in sakura (+0x126db) (0x0033d22c)
  3 0x00411b0a in sakura (+0x11b0a) (0x0033d254)
  4 0x7ec9a8fa WINPROC_wrapper+0x1a() in user32 (0x0033d284)
  5 0x7ec9ad4a call_window_proc+0x6a(hwnd=<register EDI not in topmost frame>, msg=<register ESI not in topmost frame>, wp=0, lp=3397872, result=0x33d358, arg=0x411ae4) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/winproc.c:469] in user32 (0x0033d2c4)
  6 0x7eca0077 WINPROC_call_window+0xf7(hwnd=<register EDI not in topmost frame>, msg=1, wParam=0, lParam=3397872, result=0x33d358, unicode=0, mapping=WMCHAR_MAP_SENDMESSAGE) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/winproc.c:2229] in user32 (0x0033d304)
  7 0x7ec5eff1 call_window_proc+0x91(hwnd=<register ESI not in topmost frame>, msg=<register EDI not in topmost frame>, wparam=0, lparam=3397872, unicode=0, same_thread=1, mapping=WMCHAR_MAP_SENDMESSAGE) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/message.c:1634] in user32 (0x0033d364)
  8 0x7ec642f5 send_message+0x1d5(info=<register EDI not in topmost frame>, res_ptr=0x33d400, unicode=0) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/message.c:2483] in user32 (0x0033d3c4)
  9 0x7ec647b3 SendMessageA+0x53(hwnd=0x10030, msg=1, wparam=0, lparam=3397872) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/message.c:2626] in user32 (0x0033d404)
  10 0x7ec93185 WIN_CreateWindowEx+0x2465(cs=0x33d8f0, className=0x33d6f0, flags=32) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/win.c:1305] in user32 (0x0033d6c4)
  11 0x7ec93494 CreateWindowExA+0xc4(exStyle=0, className="CEditApp", windowName="CEditApp", style=13565952, x=-2147483648, y=0, width=100, height=100, parent=(nil), menu=(nil), instance=0x400000, data=(nil)) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/win.c:1471] in user32 (0x0033d924)
  12 0x00411e0b in sakura (+0x11e0b) (0x0033d98c)
  13 0x00401dad in sakura (+0x1dad) (0x0033fed0)
  14 0x0047cc7b in sakura (+0x7cc7b) (0x0033ff00)
  15 0x00000000 (0x0033ffe8)
  16 0xb7e65e1d wine_call_on_stack+0x1d() in libwine.so.1 (0x00000000)
0x7e48c483 X11DRV_RegisterHotKey+0x153 [/home/sakaihdt/src/wine-1.1.26/build/dlls/winex11.drv/../../../dlls/winex11.drv/keyboard.c:2082] in winex11: movl    0x84(%edx),%eax
2082            err = XGrabKey(display, x_keycode, x_modifiers|grab_mask, DefaultRootWindow(display), False, GrabModeAsync, GrabModeAsync);
Modules:
Module    Address            Debug info    Name (72 modules)
PE      400000-  6b8000    Export          sakura
ELF    7b800000-7b963000    Deferred        kernel32<elf>
  \-PE    7b820000-7b963000    \               kernel32
ELF    7bc00000-7bcb1000    Deferred        ntdll<elf>
  \-PE    7bc10000-7bcb1000    \               ntdll
ELF    7bf00000-7bf04000    Deferred        <wine-loader>
ELF    7e023000-7e056000    Deferred        uxtheme<elf>
  \-PE    7e030000-7e056000    \               uxtheme
ELF    7e056000-7e0bf000    Deferred        libgcrypt.so.11
ELF    7e0bf000-7e0d1000    Deferred        libtasn1.so.3
ELF    7e0d1000-7e0e7000    Deferred        libresolv.so.2
ELF    7e0e7000-7e10b000    Deferred        libk5crypto.so.3
ELF    7e10b000-7e19d000    Deferred        libkrb5.so.3
ELF    7e19d000-7e23a000    Deferred        libgnutls.so.26
ELF    7e23a000-7e265000    Deferred        libgssapi_krb5.so.2
ELF    7e265000-7e29c000    Deferred        libcups.so.2
ELF    7e2b7000-7e2c0000    Deferred        libxcursor.so.1
ELF    7e2c0000-7e2c5000    Deferred        libxfixes.so.3
ELF    7e2c5000-7e2c9000    Deferred        libxcomposite.so.1
ELF    7e2c9000-7e2d1000    Deferred        libxrandr.so.2
ELF    7e2d1000-7e2db000    Deferred        libxrender.so.1
ELF    7e2db000-7e2de000    Deferred        libxinerama.so.1
ELF    7e2de000-7e2e3000    Deferred        libxdmcp.so.6
ELF    7e2e3000-7e2fd000    Deferred        libxcb.so.1
ELF    7e2fd000-7e301000    Deferred        libxau.so.6
ELF    7e301000-7e306000    Deferred        libuuid.so.1
ELF    7e306000-7e3f5000    Deferred        libx11.so.6
ELF    7e3f5000-7e405000    Deferred        libxext.so.6
ELF    7e405000-7e41d000    Deferred        libice.so.6
ELF    7e41d000-7e426000    Deferred        libsm.so.6
ELF    7e42a000-7e42e000    Deferred        libgpg-error.so.0
ELF    7e42e000-7e432000    Deferred        libkeyutils.so.1
ELF    7e432000-7e43b000    Deferred        libkrb5support.so.0
ELF    7e43b000-7e43f000    Deferred        libcom_err.so.2
ELF    7e441000-7e4de000    Dwarf           winex11<elf>
  \-PE    7e450000-7e4de000    \               winex11
ELF    7e55b000-7e582000    Deferred        libexpat.so.1
ELF    7e582000-7e5af000    Deferred        libfontconfig.so.1
ELF    7e5af000-7e5c5000    Deferred        libz.so.1
ELF    7e5c5000-7e63c000    Deferred        libfreetype.so.6
ELF    7e63c000-7e6a9000    Deferred        rpcrt4<elf>
  \-PE    7e650000-7e6a9000    \               rpcrt4
ELF    7e6a9000-7e7a5000    Deferred        ole32<elf>
  \-PE    7e6c0000-7e7a5000    \               ole32
ELF    7e7a5000-7e7c6000    Deferred        imm32<elf>
  \-PE    7e7b0000-7e7c6000    \               imm32
ELF    7e7c6000-7e824000    Deferred        shlwapi<elf>
  \-PE    7e7d0000-7e824000    \               shlwapi
ELF    7e824000-7e9b2000    Deferred        shell32<elf>
  \-PE    7e830000-7e9b2000    \               shell32
ELF    7e9b2000-7ea64000    Deferred        comdlg32<elf>
  \-PE    7e9c0000-7ea64000    \               comdlg32
ELF    7ea64000-7eb2c000    Deferred        comctl32<elf>
  \-PE    7ea70000-7eb2c000    \               comctl32
ELF    7eb2c000-7ebce000    Deferred        gdi32<elf>
  \-PE    7eb40000-7ebce000    \               gdi32
ELF    7ebce000-7ed1a000    Dwarf           user32<elf>
  \-PE    7ebf0000-7ed1a000    \               user32
ELF    7ed1a000-7ed50000    Deferred        winspool<elf>
  \-PE    7ed20000-7ed50000    \               winspool
ELF    7ed50000-7eda6000    Deferred        advapi32<elf>
  \-PE    7ed60000-7eda6000    \               advapi32
ELF    7eda6000-7edb2000    Deferred        libnss_files.so.2
ELF    7edb2000-7edbb000    Deferred        libnss_compat.so.2
ELF    7efbf000-7efe5000    Deferred        libm.so.6
ELF    7efe7000-7f000000    Deferred        libnsl.so.1
ELF    b7cc2000-b7cc6000    Deferred        libdl.so.2
ELF    b7cc6000-b7e29000    Deferred        libc.so.6
ELF    b7e2a000-b7e43000    Deferred        libpthread.so.0
ELF    b7e44000-b7e4f000    Deferred        libnss_nis.so.2
ELF    b7e5e000-b7f9a000    Dwarf           libwine.so.1
ELF    b7f9c000-b7fba000    Deferred        ld-linux.so.2
Threads:
process  tid      prio (all id:s are in hex)
0000000e
    00000016    0
    00000015    0
    00000014    0
    00000010    0
    0000000f    0
00000011
    00000018    0
    00000017    0
    00000013    0
    00000012    0
00000019 (D) Z:\home\sakaihdt\tools\sakura.exe
    0000001a    0 <==
0000001b
    0000001c    0
Backtrace:
=>0 0x7e48c483 X11DRV_RegisterHotKey+0x153(hwnd=0x10030, id=4660, modifiers=<is not available>, vk=90) [/home/sakaihdt/src/wine-1.1.26/build/dlls/winex11.drv/../../../dlls/winex11.drv/keyboard.c:2082] in winex11 (0x00336504)
  1 0x7ec41aea RegisterHotKey+0x5a(hwnd=0x10030, id=4660, modifiers=3, vk=90) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/input.c:877] in user32 (0x00336534)
  2 0x004126db in sakura (+0x126db) (0x0033d22c)
  3 0x00411b0a in sakura (+0x11b0a) (0x0033d254)
  4 0x7ec9a8fa WINPROC_wrapper+0x1a() in user32 (0x0033d284)
  5 0x7ec9ad4a call_window_proc+0x6a(hwnd=<register EDI not in topmost frame>, msg=<register ESI not in topmost frame>, wp=0, lp=3397872, result=0x33d358, arg=0x411ae4) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/winproc.c:469] in user32 (0x0033d2c4)
  6 0x7eca0077 WINPROC_call_window+0xf7(hwnd=<register EDI not in topmost frame>, msg=1, wParam=0, lParam=3397872, result=0x33d358, unicode=0, mapping=WMCHAR_MAP_SENDMESSAGE) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/winproc.c:2229] in user32 (0x0033d304)
  7 0x7ec5eff1 call_window_proc+0x91(hwnd=<register ESI not in topmost frame>, msg=<register EDI not in topmost frame>, wparam=0, lparam=3397872, unicode=0, same_thread=1, mapping=WMCHAR_MAP_SENDMESSAGE) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/message.c:1634] in user32 (0x0033d364)
  8 0x7ec642f5 send_message+0x1d5(info=<register EDI not in topmost frame>, res_ptr=0x33d400, unicode=0) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/message.c:2483] in user32 (0x0033d3c4)
  9 0x7ec647b3 SendMessageA+0x53(hwnd=0x10030, msg=1, wparam=0, lparam=3397872) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/message.c:2626] in user32 (0x0033d404)
  10 0x7ec93185 WIN_CreateWindowEx+0x2465(cs=0x33d8f0, className=0x33d6f0, flags=32) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/win.c:1305] in user32 (0x0033d6c4)
  11 0x7ec93494 CreateWindowExA+0xc4(exStyle=0, className="CEditApp", windowName="CEditApp", style=13565952, x=-2147483648, y=0, width=100, height=100, parent=(nil), menu=(nil), instance=0x400000, data=(nil)) [/home/sakaihdt/src/wine-1.1.26/build/dlls/user32/../../../dlls/user32/win.c:1471] in user32 (0x0033d924)
  12 0x00411e0b in sakura (+0x11e0b) (0x0033d98c)
  13 0x00401dad in sakura (+0x1dad) (0x0033fed0)
  14 0x0047cc7b in sakura (+0x7cc7b) (0x0033ff00)
  15 0x00000000 (0x0033ffe8)
  16 0xb7e65e1d wine_call_on_stack+0x1d() in libwine.so.1 (0x00000000)





今日もデバッグ楽しいな!!

前回は、OnCommand()関数までいっていて、Wineが怪しいというところまでわかっておりましたがはてはて・・・・


● Windowz7上での呼び出し階層
CEditWndProc() hwnd:132848 uMsg:273 wParam:65574 iParam:0
DispatchEvent() hwnd:132848 uMsg:273 wParam:65574 iParam:0
CEditWnd::OnCommand() wNotifyCode=1
CEditWnd::OnCommand()  nFuncCode=30311
[d:\project\sakuraeditor\trunk\sakura_core\ceditview_command.cpp:344] debug sakai F_UP
OnPaint(28,96)-(925,97) : 1

となっており、最終的に「WNDCLASSEX 」クラスの
「lpfnWndProc(コールバック)」までたどりつくのです。

Windowzでは、矢印ボタン・F1、F2、Cntl+Cなどの押下で、「lpfnWndProc(コールバック)」が呼び出されるのですが、Wine上では、呼び出されていない。。。。
(ちなみにSPACEも動作がおかしいが、コールバックは呼び出されている)

つまりWine側の、ipfnWndProc関数を修正すれば良さそうだ、

sakura側での修正はちょっとむづかしそう!?










忍者ブログ [PR]
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
一乗寺 又兵衛
性別:
男性
職業:
コンパイル
趣味:
コンパイル
バーコード
ブログ内検索