Visual Studio 2005でコンパイルしたプログラムで、Visual Studio 2008で構築されたサードパーティの.libとリンクできないのはなぜですか?ありがとう
2 に答える
2
更新:これは、元の質問であったDLLにのみ適用されます。静的ライブラリを使用すると、すべての希望が失われます。
私はいくつかの事実を要約しようとします:
- ABI自体は互換性があるため、すべてのデータ型と関数シグネチャに同じ定義を使用するコードは問題ありませんが、
- システム内部構造定義とシステムインクルードファイルは、以下を除いて変更されている可能性があります。
- ABIの一部は、固定互換性または下位互換性があるように定義されています。
したがって、関数とメソッドを呼び出して、完全に(つまり、それらのメンバーを含む)定義されたデータ型を渡すのは安全です。
- DLLに一致するヘッダーファイル内、または
- IDLファイル内(これらは一度公開されると変更されないことを意図しているため)、または
- 定義が修正されることが保証されている場合は、システムヘッダーを含む別のヘッダーファイル
ポインターメンバーの場合、ポインターが逆参照されない場合、ルールは緩和されます。
ここで注意が必要な部分は次のとおりです。
- システムアロケータの内部データ構造は、不変のセットの一部ではありません。割り当てられたメモリへのポインタは、その直前の割り当て構造へのポインタでもあるため、間接参照なしのルールが適用されます。したがって:
CoTaskMemAlloc()
/を除いて、渡されたメモリの割り当てを解除することは安全ではありませんCoTaskMemFree()
。- 仮想デストラクタは、オブジェクトがDLL内に作成された場合にのみ呼び出すことができます(コンストラクタがエクスポートされるかどうかではなく、ここでカウントされるのはnew-expressionです)。
- 非仮想デストラクタは、オブジェクトがDLLの外部で作成された場合にのみ呼び出すことができます。
- STLは不変のセットの一部ではないため、
struct
STLタイプを含むものは安全ではありません。
于 2012-01-04T09:33:11.907 に答える
0
- STLとVisualStudioの混合ヘッダーが機能しない:異なるバージョンのVisualStudioのライブラリを混合する際のランタイムの問題
- 分離は非常に困難です。異なるバージョンのVisualStudio2002以降から構築されたCコードの静的ライブラリを混在させる
于 2012-01-04T08:56:12.007 に答える