2011-01-04 24 views
7

私は古いBorland Compiler(BC 5)を使ってCで書かれた古いアプリをサポートしなければなりません。古いBorland CでVisual C++ DLLを使用していますか?

私たちが使用していた古いTCP/IPライブラリは、年齢を示し始めており、Vista & Win7マシンで問題が発生しています。

私はMSのVisual C++のために利用可能な機能の新しいライブラリを持っている、と私はボーランドC.

から呼び出し可能になるDLLを作るためにそれを使用したいのですが、私は2つの問題があります を1)Visual C++ DLLをBorland Cプログラムから呼び出し可能にする方法と 2)呼び出し可能な場合、C++関数を普通の古いCから呼び出す方法は?

理想的には、プロジェクト全体をVisual Cに変換する必要がありますが、そのプロジェクトを主要な事業にする多くのレガシー機能があります。私は、Windows STDCALL C関数としてのインターフェースを公開のVisual C++を使用してDLLを書くながら、長い:)

スティーブ

+0

まだBorland Cコンパイラはありますか?そうであれば、アプリとライブラリの接触面積を減らすことができます。 –

答えて

6

ために生き、それを維持するために迅速なパッチを探しています。 Windows API関数も同様に行われます。インターフェイスで公開するこれらの関数は、プログラムで置き換える必要のある関数を実行します。 DLL内で、新しいMS VC++ライブラリを放棄して呼び出します。あなたもDLLから関数をエクスポートするための情報を追加する必要があります

extern "C" int __stdcall foo();

だからCから呼び出し可能であるとSTDCALLスタックプロトコルは、このような何かを使用する関数を取得します。

extern "C" __declspec(dllexport) int __stdcall foo();

しかし、あなたはおそらくDLLインポート部分とSTDCALLを指定するためのさまざまな構文を持つあなたのBorlandCコードで使用するための別のヘッダファイルを(必要があります:あなたは、次のような宣言で明示的にこれを行う可能性があります部)。

extern "C" __declspec(dllimport) int __stdcall foo();

2
あなたはBorlandのIMPLIBユーティリティを使用してボーランドOMFインポートするライブラリを作成することができ

:IMPLIB -a "whatever.omfを"「whatever.dllのVisual C++で使用すると、クライアントで使用したいの宣言は次のようになります"ここで、DLLファイルはMSVCによって作成されたものです。

-aオプションは、Microsoftと互換性があります。エクスポートされた関数とその呼び出し規約(s)が動作するはず指定するヘッダファイルと組み合わせて生成されたOMF(Borlandのインポートライブラリファイル形式)、...(私はIMPLIBは、C++ Builderの5の周りだったと思います)

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devwin32/implib_xml.html

関連する問題