【C++】マイナーGUIツ ..
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
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4899日前に更新/102 KB
担当:undef