C++ Visual Studio 编译器按托管方式编译本机代码

C++ Visual Studio Compiler compiles native code as managed

我在 VS 下启动了一个新的解决方案,它有一个托管的 UWP 代码项目和一个本机项目。编译器编译本机代码并交付一个 .lib 文件就好了。编译托管代码时,编译器再次编译本机代码——作为托管代码并吐出错误。

我有另一个可用的解决方案,我尝试复制这些设置。经过一天比较 属性 设置后,我无法弄清楚为什么它正在做它正在做的事情。

关于去哪里看的想法?

_____ 下面新增_____

我开始了一个新的解决方案项目并复制了所有内容。这是我学到的。

首先,编译顺序不同——缺少一个 stdafx.h 文件,错误从无限增加到只有 25 个。它们现在与一个文件 MotionBase 相关。本机项目编译得很好,然后托管项目编译并在 MotionBase 上运行。此代码示例给出错误“'MotionBase':不是 'BallLib' 的成员”和“'input':未知覆盖说明符”。

#pragma once
#include "stdafx.h"
#include "FiniteDiffHelpers.h"
#include "MotionBase.h"
#include "MultiVarSolver.h"

namespace BallLib {
    class PathFinderHelper : public FiniteDiffHelper
    {
    public:
        PathFinderHelper();
        Line locs;
        BallLib::MotionBase output;
        MotionBase input;

.....

PathFinderHelper 在本机项目中编译良好。 MotionBase 中没有错误。 MotionBase 是 BallLib 的一部分。 Intelisense 在 PathFinderHelper 中没有给出任何错误。

并非所有相关设置都在项目属性对话框中。还要检查非模态属性 window,特别是在解决方案资源管理器中选择了项目到项目的引用。

在那里你会发现一个名为 "Use Library Dependency Inputs" 的设置,它会导致主项目包含库项目中的各个源文件,而不是静态库。确保将其设置为 False。

确保 stdafx.h 文件已正确插入代码中。构建顺序不同,因此您可能会被困住。

在托管 pch.h 文件中包含 (#include) 本机 stdafx.h。