2012-02-15 117 views
1

我使用Visual Studio 2010創建了一個Windows Form項目,並從使用OpenCV的舊版控制檯項目中移植了一些代碼。我得到了以下消息時,我編譯:OpenCV警告:「函數編譯爲本機」

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

一些挖後,它似乎是CLR支持設置的問題。我見過幾篇關於同一問題的文章,但我的問題會更一般:

與「native」和「clr」有什麼關係?各種級別的clr支持有什麼不同?我認爲我沒有找到一個能夠簡潔地告訴我有關這個概念的頁面,然後再重載一堆其他細節。

謝謝。

回答

2

簡短回答: 聽起來你正在編譯你的項目爲C++/CLI。如果您想要普通的非託管C++,請在Visual Studio中使用C++「Win32 Project」模板,而不是「Windows窗體應用程序」。

再回應: A C++/CLI程序可以包含兩種類型:

  • 原住民 - 這些都是普通的C++類型。
  • CLR - 這些是特殊類型(「ref類」),它們是真正被管理的.NET類型。

C++/CLI的神奇之處在於,您可以在一個程序中將普通的本機C++類型與.NET類型混合使用。您可以從本機類型調用CLR類型並返回,並且C++/CLI會生成必要的互操作代碼。

通常情況下,如果您有現有的.NET代碼和本地代碼,並且需要讓它們一起工作,則只需要擔心這一點。如果你沒有這種情況,你只需要使用普通的本地C++。

+0

感謝您的快速和翔實的迴應。我假設我列出的警告只是說「這裏的這個方法不是.NET庫的一部分,我們把它當作一個正常的C++函數」。我正在使用Windows窗體應用程序,因爲很容易組裝一個Win32項目看不到的GUI系統。由於我從正常的C++應用程序借用代碼,我想這就是爲什麼我得到這個警告。然而,它讓我感到困惑,至於爲什麼CLR和本機似乎不能很好地混合(即我必須使用'String ^'而不是'string')。我從來沒有與其他語言的概率。 – 2012-02-15 03:40:19