我以前关于同一项目的问题:one和two。没有必要阅读它们;只知道我正在尝试在Visual C ++项目中使用本机C ++ SDK。这比我最初的想法要复杂得多,但这个关于Extending a native C++ project with managed code的网站已经帮助我了很多。
根据最后一个链接的说明,我在我的原生C ++项目中添加了一个表单,该项目已自动将项目转换为CLR项目。只有MainForm.cpp
和Interface.cpp
(允许本机C ++代码创建和显示MainForm的文件)使用/clr
标志进行编译;其他文件仍然是原生的。
我现在遇到的问题是,Visual Studio似乎无法识别MainForm.h
中使用的任何CLR内容。因此,在以下几行中:
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
单词System
总是用红色加下划线,并带有相应的错误:
error C2653: 'System' is not a class or a namespace name
对于每一行。
它也无法识别单词gcnew
和其他可以在CLR中轻松工作的东西。
有谁可以告诉我,我可能做错了什么?我的猜测是它非常小;我忘记改变一些旗帜,缺少参考或类似的东西,但我无法弄清楚它是什么。
答案 0 :(得分:3)
你在哪里直接和间接地包括MainForm.h
?
如果您在MainForm.h
中加入Interface.h
,则可以间接地将其包含在Interface.h
的任何位置。这意味着,如果您在任何未使用Interface.h
编译的翻译单元(即* .cpp)中包含/clr
,那么编译器当然会抱怨它,因为namespace System
和gcnew
不属于标准C ++。
因此,您应仅在MainForm.h
中加入Interface.cpp
,并在Interface.h
中使用转发声明。