Borland C++ Compiler(以下BCC)は, Windows環境では最強のフリーコンパイラであろう. なにしろ,無料でC++ Builderのコマンドラインツールを使うことができるのだから.
PROPATH DLL,というよりVisual Fortranで作成したDLLは,もちろんBCCでも利用することができる. ただし,VC用のインポートライブラリをそのまま利用することはできない. Microsoft系言語のオブジェクト形式はCOFF(Common Object File Format)呼ばれるのに対し, Borland系言語のそれはOMF(Object Module Format)と呼ばれ,両者には互換性が無いからである.
それでは,VC用とBCC用の二種類のインポートライブラリを作成しなければならないのかというと, さすがはBorland, BCCにはIMPLIB.EXEという優れもののツールが付属しているのである. これを使えばDLLからOMF形式のインポートライブラリを作成でき, インポートライブラリが提供されていなくてもDLLでも利用できる. おまけに,DLLからエクスポートされている関数名を 直接確認することができるTDUMP.EXEも付属している.
BCCのインストール
インポートライブラリの作成
メイクする
まずここから freecommandlinetools2.exeをダウンロードする. このファイルは自己解凍アーカイブになっており,実行すればファイルのコピー先を聞かれる. デフォルトではC:\Borland\Bcc55となっていたが,ここではD:\bcc32にコピーしたとする. コピーが完了したら,BINディレクトリにPATHを通しておく. また,同じくBINディレクトリに以下の二つのファイルを作成する.
bcc32.cfg
-I"d:\Bcc55\include"
-L"d:\Bcc55\lib"
-L"d:\Bcc55\lib"
例えば,jh2o.dllのインポートライブラリを作成するならば, コマンドラインから
% implib jh2o.lib jh2o.dll
と入力するだけである. libの方を先に入力する.
BCCでコンパイルする場合,MFCなどコンパイラ依存のライブラリを使っていないのならば,
コードの変更は必要ない.
例えば,以下のようなプログラムloadlib.cを作成したとする.
#include <windows.h>
#include <stdio.h>
typedef void ( CALLBACK* PROPATH_KPAMES )( int, int );
typedef float ( CALLBACK* PROPATH_FUNC3 )( char* );
void main(){
HINSTANCE hDLL;
PROPATH_KPAMES kpames;
PROPATH_FUNC3 func3;
float tc, pc;
int kpa = 1, mes = 1;
hDLL = LoadLibrary( "jh2o.dll" ); // DLLをロード
if ( hDLL != NULL ){
kpames = ( PROPATH_KPAMES )GetProcAddress( hDLL, "KPAMES" );
kpames( kpa, mes );
func3 = ( PROPATH_FUNC3 )GetProcAddress( hDLL, "CRP" );
tc = func3( "T" );
pc = func3( "P" );
printf( "tc = %10.5f\n", tc );
printf( "pc = %10.5f\n", pc );
FreeLibrary( hDLL );
}
}
% bcc32 loadlib.c
と入力する.
インポートライブラリをリンクさせる場合,ここにあるppropath.hをインクルードし,
% bcc32 main.c jh2o.lib
とする. ppropath.hは依存関係により検索されるので,bcc32の引数として与えなくてもよい.
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||