23

"warning C4793: 'anonymous namespace'::CV_XADD' : function compiled as native"C++ プロジェクトが CLR サポート付きでコンパイルされている場合、OpenCV ライブラリとそのヘッダー ファイルの 1 つである cxoperations.hpp を使用しています。OpenCV ヘッダー インクルードを次のように囲むことで、警告を回避できます。

#pragma managed(push,off)
#include <cv.h>
#pragma managed(pop)

しかし、実際に OpenCV を使用するプロジェクトは、CLR をサポートするようにコンパイルされたものではなく、ネイティブの C++ 静的ライブラリです。CLR サポートがあり、プラグマ ステートメントなしでこの警告を生成するプロジェクトは、単にこの静的ライブラリを使用します。そのため、特にスタティック ライブラリ全体が CLR サポートでコンパイルされていないという事実を考えると、警告がまったく作成されたことに少し驚いていますが、問題を引き起こすのはこの 1 つのヘッダーだけです。

したがって、このソリューションは私には最適ではないようです。これは、この警告を処理する方法ですか、それともより良い方法をお勧めできますか?

4

3 に答える 3

19

あなたが望むのはこれだと思います:

#pragma unmanaged
#include <cv.h>
#pragma managed
// managed code wrapping unmanaged opencv functions

C++/CLI プロジェクトには、マネージ部分とアンマネージ部分の両方を含めることができ、コンパイラが 2 つの間のデータのマーシャリングを処理します。マネージ エントリ ポイントは、通常の .NET アプリ (C# など) から呼び出すことができ、ガベージ コレクションを使用し、アンマネージ関数を呼び出して面倒な作業を行います。

于 2010-05-06T22:20:24.213 に答える
0

既存のコード ファイルを変更できない場合は、警告 4793を示す特定のファイルの CLR サポートを無効にすることで、警告を取り除くことができます。もちろん、これは、このファイルが CLR 機能をまったく使用しない場合にのみ機能します。

特定のファイルの CLR サポートを無効にするには、ソリューション エクスプローラーでそのファイルを見つけ、右クリックしてそのプロパティ ページを開きます。Common Language RunTime SupportNo Common Language RunTime Supportに設定します。All ConfigurationsおよびAll Platformsに対してこれを行うことを忘れないでください。

ファイルごとに CLR サポートをオフにする

于 2015-11-23T16:48:25.017 に答える