7

古い Borland Compiler (BC 5) を使用して C で記述された古いアプリをサポートする必要があります。

残念ながら、私たちが使用していた古い TCP/IP ライブラリは古くなり始めており、Vista および Win7 マシンで問題が発生しています。

MS Visual C++ で使用できる関数の新しいライブラリがあり、それを使用して、Borland C から呼び出し可能な DLL を作成したいと考えています。

したがって、私には 2 つの問題があります。1) Visual C++ DLL を Borland C プログラムから呼び出し可能にする方法、および 2) 呼び出し可能である場合、単純な古い C から C++ 関数を呼び出す方法は?

理想的には、プロジェクト全体を Visual C に変換する必要がありますが、そのプロジェクトを大事業にする多くのレガシー機能があります。しばらくの間、それを維持するための簡単なパッチを探しています:)

スティーブ

4

2 に答える 2

6

インターフェイスを Windows STDCALL C 関数として公開する Visual C++ を使用して DLL を記述します。Windows API 関数も同様に行われます。インターフェイスで公開する関数は、プログラムで置き換える必要がある関数を実行します。DLL 内で、新しい MS VC++ ライブラリを放棄して呼び出します。

したがって、C から呼び出し可能で、STDCALL スタック プロトコルを使用する関数を取得するには、次のようにします。

extern "C" int __stdcall foo();

DLL から関数をエクスポートするための情報も追加する必要があります。次のように、宣言で明示的にこれを行うことができます。

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

ただし、BorlandC コードで使用する別のヘッダー ファイルが必要になります (おそらく、DLL インポート部分と STDCALL 部分を指定するための構文が異なります)。Visual C++ では、クライアントで使用する宣言は次のようになります。

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

于 2011-01-04T23:22:21.440 に答える
2

BorlandのIMPLIBユーティリティであるIMPLIB-a"whatever.omf" "whatever.dll"を使用して、Borland OMFインポートライブラリを作成できます。DLLファイルは、MSVCによって作成されたものです。

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

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

于 2011-01-05T02:56:40.317 に答える