2017-01-20 4 views
0

既存のC++コードベースとc#wpfアプリケーションの間にCLI interopレイヤーを書き込もうとしています。私のC++ライブラリは、自分自身のメモリトラッキングやその他の細かい点を実装するために、すでにグローバルなnewとdeleteをオーバーロードしています。私は私のネイティブライブラリが含まれており、私を試してみて、ビルドするたび、しかし>(C#WPFアプリケーション)グローバル削除のオーバーロードの競合

- >(CLI層) -

(ネイティブライブラリが静的LIBにコンパイル):だから、依存関係は次のようになりすでにmsvcrtdで定義された

エラーLNK2005 "のボイド__cdeclオペレータは、(void *型)を削除"(YAXPAXする@ Z @ ?? 3):CLIプロジェクト、私はすでにmsvcrtdで定義されたグローバルな削除のために、競合するシンボルに実行します.lib(delete_scalar.obj)

私はビルドでデフォルトのライブラリにあるものの代わりにグローバルな削除を取る方法を知りません。私は、DLLをコンパイルして静的なライブラリをすべてコンパイルしてから、そのDLLをロードするinteropレイヤを持つ別の純粋なネイティブプロジェクトを作成しようとしました。これはうまくいきますが、接着剤の代わりに2層の接着剤を使用しないでください。

私はVisual Studio 2015を使用しています。

+1

メモリのトラッキングは素晴らしいですが、グローバルに新しいオーバーロードがあり、プレーンハックを削除していませんか? – Steeve

+0

この問題を再現するために小さなテストケースを設定しようとしましたか? 1つの考えは、C++ライブラリの設定が異なることです。特に静的リンクの場合 –

答えて

0

ネイティブコンポーネントはCRTをDLLとして使用しますか?混合アセンブリを使用する場合は、これが必要です。ライブラリに静的にリンクされている場合、静的なCRTを使用すると問題が発生します。

/VERBOSEフラグをチェックしてリンクすると、この他の削除の原因となる箇所が表示されます。この他のライブラリ呼び出しを削除します。

関連する問題