C++互操作 DLL 和引用,以及 /FU 强制包含指令



我正在修改一个互操作项目,我很困惑单个.cpp文件如何应用与"引用"部分下添加的任何引用匹配的/FU 编译器选项,尽管它实际上并未列在"强制 #using 文件"下。

只有名为"MyProject.Interop.cpp"的文件列出了此/FU 选项。

我遵循的假设可能是因为 cpp 文件与项目文件的名称匹配,但是我可以将 MyProject.Interop.cpp 重命名为 Bob.cpp它仍然会以/FU 选项设置为我添加到引用的任何 dll 结束。

如果您实际查看.vcxproj文件内部,则没有对/FU 选项的引用。 如果我在 C++\Advanced 下的高级部分中手动添加一个,那么它就会出现在 XML 中的ForcedIncludeFiles标记下。

所以使用以下项目设置

<Reference Include="MyCSharpLibrary">
<Private>false</Private>
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
</Reference>

/FU将显示在C++工具的"Command Line"部分下

我还看了一下它是否继承了任何特殊的 .props 文件,但它没有。

这是因为我想拆分类的实现,其中全部在MyProject.Interop.cpp中,以便按类组织它们,但是它们不编译,因为没有为这些文件生成隐式#using

有谁知道项目设置是什么,这使得这个文件很特别?

在对项目进行了更多的摆弄并调查了各种选项之后,答案是任何启用了/clr 的.cpp文件都会自动收到项目参考部分中包含的每个引用的/FU选项。

最新更新