Article View: fj.lang.c
Article #670[Q]Multi platform DLL
From: Hideo Ikeuchi
Date: Sat, 07 Mar 1998 00:00
Date: Sat, 07 Mar 1998 00:00
101 lines
3987 bytes
3987 bytes
こんにちは,池内と申します。
Windows,OS/2,Linux,Next-Step,Dos上での
DLLの実装について質問があります,
どこに投稿すればよいのか分かりません
でしたが,fj.lang.cなら色々な環境で開発
しておられる方が居られると思い,こちらに
投稿しました。
DLLについて質問があります,CPUは
インテル(486,pentium...)を前提としています。
メガデモを簡単に作成できるdemo-trackerを
作成してますがプラグインでユーザー独自の
イフェクトを実装できるようにと考えています,
メガデモといってもご存じない方が大多数だと
思われるので,「demo-tracker==ビデオ編集の
ソフト」とお考えください,画像と音声などを扱う
ソフトです。
プラグイン==DLLとして考えています。
DLLをWin,OS/2,Linux...etc固有のフォーマットで
作成すると,ユーザーにOS/2,Win,Linux...etc
のコンパイラを必要とするので,DLLを独自の
フォーマットにして複数の環境で同じDLLの
ファイルを使用できるようにと考えています。
demo-playerからDLLの呼び出しは
malloc()で確保した領域にDLLファイル中の
コードをコピーして,関数へのポインターで
呼び出してやろうと考えています。
そこで二つ疑問に思ったのですが,
質問1
malloc()で確保された領域は通常データ
セグメントに確保されますよね?,コード
セグメント以外の領域を関数へのポインターで
呼び出しても安全なのでしょうか??
DOSではDS=CSなので問題なさそうですが,
Windows,OS/2,Linux,Next-Stepの環境ではどうで
しょうか??
質問2
質問1のアルゴリズムが不可能な場合は
void DLLのコードを入れておく領域(void)
{
asm{
nop,
nop,
:
:
以下大量に続く
}
}
下記のようにすればコードセグメントにメモリ領域を
とる事ができますけど,コードセグメントを書き換えれ
るか少しばかり不安です,Win,Dosなら命令書き換え
が可能なので実現可能ですけど,OS/2,Linux,Next-Step
では可能でしょうか??
上記の質問は自分で調べろといわれればそれまで
ですが,Win,Dos以外は環境が金銭的な関係で構築で
きないもので(汗)
DLLのコードはインテル(486,pentiumとか)を前提
としています。
マルチプラットフォームDLLは,やはり無謀でしょうか(^^;;;)
DLLをスクリプトで記述すれば簡単ですが遅いですし。
DLL中ではハードへアクセスしたりOSのAPIを
呼び出すようなコードは記述しません,仮想マシン上で
動くコードを記述します。
私が使用しているライブラリーは以下のような構造で
ハード・OSの違いを吸収しています。
-------------------------------------
仮想マシン上で動くコード。
イフェクト・音楽・動画・圧縮・3D・メモリ管理・
ファイル管理・数学....etc
#DLLはこのレイヤーに存在する。
-------------------------------------
仮想マシン
-------------------------------------
ハード・OSを吸収するレイヤー
-------------------------------------
ハード・OS
-------------------------------------
DLL中から他のDLLの関数を呼び出す場合とかは
関数へのアドレスを絶対アドレスではなくて,どっかの
アドレスからの相対アドレスにしないといけませんが
その辺りの問題はほぼ解決済みです,後は実際に
コードを組んで試してみるだけです。
--
---
Hideo Ikeuchi
Megademo,Mod otaku http://demo.and.or.jp
E-mail ikeuchi@and.or.jp
Technical Details
Message-ID:
<6drmqk$rse@nntp.urban.or.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 106434,1a776bc12708a47a,start X-Google-Attributes: gid106434,public From: ikeuchi@and.or.jp (Hideo Ikeuchi) Subject: [Q]Multi platform DLL Date: 1998/03/07 Message-ID: <6drmqk$rse@nntp.urban.or.jp> X-Deja-AN: 331710138 Mime-Version: 1.0 Content-Type: Text/Plain; charset=ISO-2022-JP Organization: Urban Internet, a Division of Urban Ecology Co. Ltd. Newsgroups: fj.lang.c