私は現在、Borland C++3.0の時代遅れのインストールを使用してコンパイルしている多くのレガシーコードを持っています。
このコードには、C#.NETアプリケーションで抽出して使用したいルールエンジンがあります。
ルールエンジンを独自のDLLに抽出する場合、移植する時間がない既存のレガシーコードとC#.NETアプリの両方からこのDLLを呼び出せるようにする必要があります。
古いBorlandコンパイラを使用してDLLをビルドすると、C#.NetプロジェクトからDLLを参照する方法がわかりません。DllImportはBadImageFormatExceptionで失敗します。この例外をグーグルで検索すると、64ビット対応のプログラムをコンパイルして32ビットをロードするときに、ほとんどの人がこの問題に遭遇することがわかります。つまり、16ビットDLLを生成していると合理的に確信しており、これに対する回避策はないようです。
32ビットコンパイラとリンカを備えた新しいBorland5コンパイラをダウンロードできますが、それでも同じ問題が発生するため、おそらくそこにも問題があります。
これは私のC#呼び出しコードです
[DllImport( "C:\\NSDB\\BorlandDLL\\BorlandDLL.dll", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl )]
static extern int Version();
public frmHelpAbout()
{
InitializeComponent();
lblIssueVersion.Text = + Version();
}
これは私のDLLコードです
int Version()
{
return 93;
}
私のコンパイラフラグとリンカフラグはすべて完全な当て推量です-これが私の主な問題であることを願っています
DLLコードが__stdcall、extern"C"などで装飾されていないことに気づきました。Borland C ++ 3.0が、必要な種類の呼び出し規約を強制するために理解している正しい記号のセットを見つけることができないようです。
だから、質問:
1)DllImportはBorland C ++ 3.0から生成されたコードを処理できますか?1b)そうでない場合、Borland C + 5.5.1コンパイラで動作するようにコードを移植し、DllImportを動作させることができますか?
2)問題を解決できますか?DLLコードを.NETに移植した場合、古いBorlandコードを取得して呼び出すことができるでしょうか。
3)この古いBorlandプロジェクトから必要なコードを簡単に抽出できる革新的なソリューションは他にありますか?