C,C++ & Delphi(Pascal) & Fortran 対応付け


★関数の形式と各関数への引数の型定義を、各言語ごとに 比較

種類 C,C++ Delphi(Pascal) Fortran
関数タイプ
(手続き)
void型
(関数)
procedure
(手続き)
SUBROUTINE
(サブルーチン副プログラム)
文字型引数宣言 char* Pchar CHARACTER
1バイト型引数宣言 unsigned char* PByte CHARACTER
4バイト型整数宣言 int* PInteger INTEGER
単精度(4バイト)実数型引数宣言 float* PSingle REAL*4
倍精度(8バイト)実数型引数宣言 double* PDouble DOUBLE PRECISION


★各関数名を外部から認識させるための各言語の宣言方法

 この方法は各言語ごとにソースコードの中に記述したり、各コンパイラの プロジェクトファイルなどに記述したり色々な方法があります。言語というより コンパイラの種類により異なると思っておいた方が良いかもしれません。 以下に書いたものや本サイトで紹介しているものは、その一例です。ここでは TRREADSUFFIX関数を例にした比較です。

<C言語>
 C言語は、どんなコンパイラの種類でも、以下のような記述をソース コードの先頭付近に挿入しておけば関数を認識させることができます。
__declspec(dllexport) void TRREADSUFFIX(char*);

<C++言語>
 C++も同様で、どんなコンパイラの種類でも、以下のような記述をソース コードの先頭付近に挿入しておけば関数を認識させることができます。
extern "C" __declspec(dllexport) void TRREADSUFFIX(char*);

<Delphi(Pascal)>
 以下の例は、Delphi 6 Personalのプロジェクトファイル内に記述した例です。
procedure TRREADSUFFIX(suffix:PChar);Cdecl;
.
.
exports
TRREADSUFFIX;

<Fortran>
 以下の例は、Compaq Visual Fortranの例で、各関数のSUBROUTINE文の直後に 以下のような記述を追加すればOKです。
!DEC$ ATTRIBUTES DLLEXPORT :: TRREADSUFFIX


 何はともあれ、trmodの「例2」の サンプルのように3種類の言語で 書いた同一機能のプログラムを比較していただくのが一番わかりやすいかと 思います。

SDKトップページへ
トップページへ