掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
機械語でWindowsのAPIを呼ぶ方法は? (ID:67602)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> スクリプトコードは、作成したゲームのRelease版にも含まれるのでしょうか? はい。 完成後はバイナリコードをリソースなどのデータとして持たせます。 作成中はテキストファイルを処理してデバッグを行い、完成後は バイナリコードに変換して処理させる仕組みです。 > これが一般的だと思っているのですが、それではダメなのでしょうか? 確かこれだね。 いま思いましたがスクリプト言語というより、スクリプト処理のエンジンと 表現した方がいいのかもしれない。 > ラッパ関数(関数へのポインタ)も増えるとちょっと呼び出すときの > 分岐が大変なので共通にしたいんです。 この分岐を struct { unsigned long (*pfunc)( unsigned long, ... ); unsigned long argn; unsigned long args[ 32 ]; } win32api; としてスクリプトのデータが (1)API関数の識別コード(通し番号=0x0000〜0xFFFF) (2)引数の個数 (3)引数のデータなどのポインタ(配列) とした場合に win32api 構造体で API 関数の呼び出しを1つに まとめれば分岐処理をするより早くなるかと思っていたのです。 なお、スクリプト処理エンジンの初期化で使用するAPI関数を LoadLibrary、GetProcAddress で必要と思うものをすべて取得して 関数アドレスのテーブルとして持てたらテーブル配列に添え字で (1)の識別コードを使ってアクセスするだけでAPI関数を分岐できると 思っています。 このような理由からC/C++の呼び出し規則などを機械語レベルで 探りたかったのです。C言語とかでは引数はスタックに積まれて 呼び出される仕組みらしいと聞いた事があります。 インライン・アセンブラもテキスト本でほんの少しだけ触れただけで 実際に使ったことはないんです。理由は機械語が分からなければ 使えないから。mov、push、pop、call の大まかな動作は分かりますが どのレジスタに何を入れればよいかが分からなかったので質問してみた。 いろいろと考えて自分でも本末転倒だなと思い始めています。 もう一度ゲーム、スクリプト処理エンジンの全体を見直してみます。 ゲームが完成後は exe と dll とスクリプトデータを一体化して コンパクトに作り上げたかったのです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.