08/11/09 21:38:28
>>450は単語一個一個調べたり、根が真面目そうなんで、
今、大量の情報がドカドカ出てきたので知らん部分をググってる最中じゃない?
期待がプレッシャーにならない程度にマターリ待つのが良いかと。
俺もラッパ作ちゃった1人なんだが、結局デザイナーツールの作成が面倒で
活用には至らなかった。
その辺までしっかり作った人っているの?
461:デフォルトの名無しさん
08/11/10 00:28:53
なぁ、>445 の方法って、ネットで探しても情報ないのな。
ATLのソース読んでみようと思ったけど、どこから読んだらいいのかわかんねw
>450 は初心者っぽいしきつい気がするのは俺だけか?
そういや、昔、CマガでGUIライブラリを作るってのがあったが
あれは参考にならないか?
もう、手に入らないけど。
462:デフォルトの名無しさん
08/11/10 02:05:47
>>460
> その辺までしっかり作った人っているの?
WideStudioってきもいけど凄いよね
463:デフォルトの名無しさん
08/11/10 06:11:25
>>461
ATLについては>>455
>>445の言ってるのはATLじゃなくてWindows Formsのことらしい
464:デフォルトの名無しさん
08/11/10 07:58:51
『組み込みGUI(ウィンドウ・システム)環境の設計と実装』って本
読んだことある人います? おもしろい?
465:デフォルトの名無しさん
08/11/10 08:11:08
>>463
>455は手軽にthunk作るやり方。
ATLはCDynamicStdCallThunkが__AllocStdCallThunkの確保した領域に機械語つっこんでるぞ。
466:デフォルトの名無しさん
08/11/10 13:35:58
>>450
適当にサンクを実装してみた。良かったら参考にしてみて。
URLリンク(www.yourfilehost.com)
>>451
stdcallとthiscallの変換があるから単純にECXに代入するだけじゃダメだぞ?
まあそれでも動くけどさ、ちょっと気持ち悪いよね。
467:デフォルトの名無しさん
08/11/10 15:47:24
>>464
フレームバッファ直描きでウィンドウシステムを作る本だよ。
OSを作ったりとか、LinuxでXを使わないGUIを作ったりとか、
そういうことに興味がある人には面白いと思う。
Windowsアプリを作るのにはほとんど参考にならない。
468:デフォルトの名無しさん
08/11/10 21:28:35
一つずつ
>>451
>つまりmovとpushくらいは3分でわかるはず。
mov・・・ジスタやメモリに、データの転送を行う
push・・・スタックにデータを積む
>そのスタックをどこで戻すかの違いがstdcallとcdecl。
このことでいいのかな?
URLリンク(www.ne.jp)
>ECX
レジストリと
こんな場所がある、程度でいいのかな?
469:デフォルトの名無しさん
08/11/10 21:32:35
>>452
>>453
>>454
調べたらこんな頁を発見
URLリンク(qwerty.s2.xrea.com)
サンク(thunk)って、調べても情報がないな。
470:デフォルトの名無しさん
08/11/10 21:34:28
>>455
いま、ここまで
参照先のリンクの内容を理解するのに苦労している。
正直、難しい。
471:デフォルトの名無しさん
08/11/10 22:41:30
>>469
wikipediaにあったぞ
URLリンク(en.wikipedia.org)
472:デフォルトの名無しさん
08/11/11 17:08:05
WindowsXP SP2のDEPでATLのThunkが問題になってたような気がするんだけど、
あれは何でなんだろ?
473:デフォルトの名無しさん
08/11/11 17:22:32
>>472
ウィルス等がバッファオーバーフローでヒープに不正コードを埋め込むことの対策として
ヒープのコードを実行できなくしたのがDEP。
ATLではサンクをHeapAlloc領域でやっていたため引っ掛かることになった。
今のATLはVirtualAllocでPAGE_EXECUTE_READWRITEで確保するため問題ない。
474:472
08/11/11 20:27:35
>>473
なるほど、わかりやすい説明サンクスです。
475:デフォルトの名無しさん
08/11/13 03:52:36
おまえら!
言いたいのをガマンしてるなら、代わり俺が言ってやるよ!
あくまでもおまえらの代弁だからな!俺が言いたいワケじゃないんだからな!
なるほど、わかりやすい説明Thunkです。
476:デフォルトの名無しさん
08/11/13 07:05:21
さみぃw
477:デフォルトの名無しさん
08/11/17 23:11:46
こんな方法どうやって勉強しました?
478:デフォルトの名無しさん
08/11/18 22:33:44
>>477
Windows 3.1の頃(15年前)からプログラム作ってたら嫌でも身に付く
479:デフォルトの名無しさん
08/11/19 18:52:55
class window
{
public:
static window *m_this;
static LRESULT CALLBACK StartWindowProc(HWND, UINT, WPARAM, LPARAM); //スタートアップ
static LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM); //本命
HWND SetHandle(HWND hwnd);//ウインドウハンドルを設定する
void Create();//ここでクリティカルセクションを設定してCreateWindowを呼ぶ
}
window *m_this;
LRESULT CALLBACK window::StartWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
window *pThis = window::m_this;
window::m_this = NULL;
//ここでクリティカルセクションを取り除く
::SetProp(hwnd, _T("THISCLASS"), (HANDLE)pThis);
pThis->SetHandle(hwnd);
::SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG)window::WindowProc);
return window::WindowProc(hwnd, msg, wParam, lParam);
}
かなりふざけた方法だけど...
俺はこんな感じでやってる...
480:デフォルトの名無しさん
08/12/01 20:53:23
何となく、自分も昔作ったGUIを晒してみようとサンプル動かしてみたら、
リストビューを拡張して作ろうとしたらしいGridViewがいきなりバグってた。
出直してきます。orz