🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #670

[Q]Multi platform DLL

#670
From: Hideo Ikeuchi
Date: Sat, 07 Mar 1998 00:00
101 lines
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-mail

Show 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