CとMinGWで記述し、VCによってコンパイルされたC ++ライブラリにリンクすると、機能しますか?
それはコンパイラー(そして私はMinGWを知りません)と特定のC++ライブラリーに依存します。
リンクしない、またはリンクするとクラッシュする可能性がある理由:
C++ライブラリは「マングル」名を使用してC++クラスとメソッドをエクスポートしていますが、MinGWのC ++名前マングリングはVCのものとは異なる場合があります(C ++ではなくCでコーディングしている場合は存在しません)。
VCコードはMinGWと同じCランタイムライブラリを使用しません。これは、APIがVCコードによってヒープにメモリが割り当てられ、MinGWコードによって解放されることになっている場合に問題になります。
VCのコードはMinGWのコードとバイナリ互換ではありません(同じパラメーター受け渡し規則を使用せず、同じ方法で例外を実装しません)
一方、それが機能する可能性があるいくつかの理由:
C ++ライブラリは、別のコンパイラから呼び出されることを意図した開発者によって、Cスタイルのインターフェイスで記述されています。
1と同じ。
MinGWコンパイラのメーカーは、VCとのバイナリ互換性を実現しました
どうすれば事前に知ることができますか?
知らない。DLLからエクスポートされた関数の名前、および/またはそのパブリック/エクスポートされたAPIを宣言するヘッダーファイルを投稿すると、C ++をエクスポートしているかどうか(おそらく互換性がない)についての非常に強力なヒントが得られます-スタイルのメソッドまたはエクスポート(より互換性が高い)Cスタイルの関数。
それ以外の場合は、2段階の質問があります。
MinGWコードがVCコードを呼び出すには、何が必要ですか(たとえば、C ++の代わりにC、たとえば、同じヒープを使用すると想定しない、たとえば、パラメーターの受け渡し規則を指定する)。
あなたのVCライブラリはそれを念頭に置いて書かれていますか?
両方のコンパイラを使用したことがある人は、おそらく最初の質問に答えることができます(私はMinGWを使用していません)。誰が2番目に答えられるかわかりません。そのVCライブラリを書いたのは誰ですか?