2012-02-15 207 views
1

Visual Studio 2010を使用してWindowsフォームプロジェクトを作成し、OpenCVを使用する古いコンソールプロジェクトからコードを移植しました。私はコンパイル時に私は、次のメッセージが表示されました:OpenCV警告:「関数はネイティブでコンパイルされました」

opencv\include\opencv\cxoperations.hpp(81): warning C4793: 'anonymous namespace'::CV_XADD' : function compiled as native :

いくつかの掘削した後、CLRサポートの設定に問題があるように思われます。私は同じ問題について話したいくつかの投稿を見ましたが、私の質問はもっと一般的です:

"ネイティブ"と "clr"とは何ですか?さまざまなレベルのclrサポートの違いは何ですか?私は、他の細かい詳細で過負荷になる前に、概念について簡潔に教えてくれるページを見つけたとは思いません。

ありがとうございました。

答えて

2

短い回答: あなたのプロジェクトをC++/CLIとしてコンパイルしているようです。通常のアンマネージドC++が必要な場合は、Visual Studioで「Windowsフォームアプリケーション」の代わりにC++の「Win32プロジェクト」テンプレートを使用します。

長い答え: - これらは、通常のC++の型です

  • ネイティブ: A C++/CLIプログラムは、タイプの2種類を含むことができます。
  • CLR - これらは実際に管理されている.NETタイプの特殊タイプ(「refクラス」)です。

C++/CLIの魔法は、通常のネイティブC++タイプと.NETタイプを1つのプログラムで混在させることができるということです。ネイティブタイプからCLRタイプを呼び出して戻すことができ、C++/CLIは必要なinteropコードを生成します。

通常、既存の.NETコードとネイティブコードがあり、それらを連携させる必要がある場合は、これについて心配してください。このようなシナリオがない場合は、通常のネイティブC++を使用するだけです。

+0

迅速で有益な回答をいただきありがとうございます。私が列挙した警告は、単に「このメソッドは.NETライブラリの一部ではなく、通常のC++関数として扱っています」と単純に言っていると仮定します。私は、Win32プロジェクトで利用できないようなGUIシステムを簡単に組み立てるため、Windowsフォームアプリケーションを使用しています。通常のC++アプリケーションからコードを借用しているので、私はこの警告を受けていると思います。 CLRとネイティブがうまく混ざり合わないように(なぜなら、私は 'string'の代わりに' String^'を使用しなければなりませんでした)、それは私を混乱させます。私は他の言語でそのような問題を経験したことはありません。 –

関連する問題