[過去ログ] C++相談室 part165 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
42
(1): デフォルトの名無しさん (ワッチョイ e5a7-cSrA) [sage] 2023/11/09(木) 17:23:48.54 ID:Op1F6lz40(1/3) AAS
VC++なんだけど32bitで_thiscallを関数ポインタ経由で呼ぶことってasm使わないと不可能?
メンバ関数を関数ポインタ変数とすることは出来てもそこから第一引数にインスタンス入れたりしてもコンパイル時エラーになる
48: デフォルトの名無しさん (ワッチョイ e5a7-cSrA) [sage] 2023/11/09(木) 21:12:03.97 ID:Op1F6lz40(2/3) AAS
>>43
43(1): デフォルトの名無しさん (ワッチョイ 454e-0SSA) [] 2023/11/09(木) 18:09:02.18 ID:vDu6brxv0(1) AAS
>>42
メンバ関数をポインタ経由で呼び出したいってことならstd::bindでできるはず
ありがとう、逆アセ見たら完璧にthiscallになってた

メンバ関数っていうかthiscall指定したものは32bitだとecxレジスタにthisポインタが隠されていてそれ以外はstdcallと同じ
なので下みたいに第一引数にインスタンスのポインタを入れる事でecxに代入される感じになりそうだなーと思ったら無理だった
ちなみに64bitの場合はどちらもfastcallで同じだから単純に第一引数にthisポインタが隠されてるだけ
auto pFunc = CDate::addDay; // CDate addDay(int value)
CDate tomorrow = pFunc(&instance, 1);
49: デフォルトの名無しさん (ワッチョイ e5a7-cSrA) [sage] 2023/11/09(木) 21:28:58.67 ID:Op1F6lz40(3/3) AAS
てかググったら簡単なシミュレーション方法載せてるブログあった
_fastcallで宣言して第二引数のedxを捨て駒にする事で疑似_thiscallになる
つまりint(__fastcall * pFunc)(CDate*, void*, int)とすれば一応アセンブラ的な辻褄は合う事になる
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.040s