编译器警告C4945

时间:2017-08-22 10:19:14

标签: c++-cli clr

我正在尝试编译一个没有依赖关系的简单CLR项目。

当我编译这个项目时,我得到了973个警告(C4945),说明

c:\windows\microsoft.net\framework\v4.0.30319\system.dll : warning C4945: 'xxx' : cannot import symbol from 'c:\windows\microsoft.net\framework\v4.0.30319\system.dll': as 'xxx' has already been imported from another assembly 'System'

正如我提到的,我的项目不依赖于其他项目,我尝试逐个编译我的cpp文件,从stdafx.cpp开始。

在执行此操作时,我注意到如果我包含#include <msclr\marshal.h>,我会收到这些警告,如果我没有警告,则会发出警告。

现在我有以下问题。

  1. {@ 1}}已被弃用并被某些内容取代 别的?
  2. 如果不是,我该如何删除这些警告? #pragma警告是否禁用了唯一的方法?

1 个答案:

答案 0 :(得分:0)

对于VS2019来说,这仍然是一个问题,但是您可以强制标题跳过#using <System.dll>,如下所示:

#pragma push_macro("_CRT_WINDOWS")
#define _CRT_WINDOWS
#include <msclr\marshal.h>
#pragma pop_macro("_CRT_WINDOWS")

这也适用于其他元帅标头(marshal_cppstd.h等)