ChMap, あるいはコンパイラーの違い

watcom C/C++について調べてみた。「呼び出し規約」ってのかな? … いろんな種類があることが判明。てゆーより今まで知らずに使ってたことが問題カモ。

  • __cdecl
  • __stdcall
  • __fastcall
  • _Optlink
  • __pascal
  • __fortran
  • _Syscall
  • __watcall

_Systemもあるようだけど _Syscallと同じっぽい。__pascalと __fortranは使わなそげ。__fastcallは名前の割には早くなりそうに思えない(最初の 2つだけしかレジスター渡しじゃないっぽいから)。defaultは __watcallのよーで, 名前からして watcom独自なのかな? 実は(その規約は) __fortranとそっくりだったり。

で, gccを調べてみると, __cdecl __stdcall が使えるっぽい。さらに _Optlinkも _Systemもある? のかな。てことで同じくみ合わせで相互にリンクができるカモ。
さらにさらに, IBM CSetだったか そんなブツ(VACPPだった) … OS2TK45とかそこらに入っているものなんだけど, モノがないだけに調べにくいけど, ライブラリーは _Syscall(_System) として用意されてる感じ(もしかすると _Optlinkの可能性もあるかもだけど)。相互にリンクできる可能性もでてきたカモ。

PM電卓

呼び出された Rexxプログラムから, 呼び出し元の何らかの処理をさらに呼び出す … そんな部分が gccで buildすると動かなくなる。こんな問題があった訳だけど, コンパイラーの違いを調べてみるに, 動かないはずはないと思うんだけど ・・・
今度, 別のコンパイラーで作った DLLを呼び出すテストでもしてみよっかな。(多分可能だと思うし)