2012-02-15 116 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