如果我的C++项目是在支持OpenCV的情况下编译的,那么我将使用CLR库和它的一个头文件cxoperations.hpp生成"warning C4793: 'anonymous namespace'::CV_XADD' : function compiled as native"
。我可以通过将OpenCV头包括在内来防止警告,如下所示:
#pragma managed(push,off)
#include <cv.h>
#pragma managed(pop)
但是实际使用OpenCV的项目并不是使用CLR支持编译的,它是一个原生的C++静态库。具有CLR支持并在不使用杂注语句的情况下生成此警告的项目只需使用此静态库。因此,我对创建警告感到有点惊讶,特别是考虑到整个静态库都不是使用CLR支持编译的,但只有这一个头文件导致了问题。
因此,对我来说,这个解决方案似乎不是最优的。这是您处理此警告的方式,还是您可以推荐一种更好的做法?
发布于 2010-05-07 06:20:24
我想你想要的是:
#pragma unmanaged
#include <cv.h>
#pragma managed
// managed code wrapping unmanaged opencv functions
C++/CLI项目既可以包含托管部分,也可以包含非托管部分,编译器会为您处理这两者之间的数据编组。托管入口点将可从普通.NET应用程序(如C#和rest)调用,并将使用垃圾回收,它们将调用非托管函数来完成繁重的任务。
发布于 2015-03-13 00:26:38
我认为你应该抑制这个警告。MSDN文档明确指出,在include语句之前不应使用托管/非托管编译指示。
#pragma warning(push)
#pragma warning(disable: 4793) // methods are compiled as native (clr warning)
#include <cv.h>
#pragma warning(pop)
https://stackoverflow.com/questions/2784864
复制相似问题