3

对于 Visual Studio 项目命名,这既是一个问题,也是一个“提示”。

我在 VS 2010 中构建了一个 ATL/COM 项目,当我运行Add --> Class --> ATL Simple Object向导来创建类 Foo 时,只创建了 Foo.rgs 文件和预期的 Foo.cpp和 Foo.h 文件没有出现。

经过几次尝试使向导工作的变体(检查了不同的选项等等),我仍然没有成功。没有错误消息,除了输出中的“无源文件”之外,没有任何迹象表明发生了故障。

在试图找到“为什么会这样”的答案的过程中,我遇到了一个提示,即需要使用 ProjectName.ClassName 手动填写相关项目和类的 ProgID 字段。当我尝试输入项目名称 (Some-Project) 时,向导抱怨连字符在该字段中是“非法字符”。

Web 搜索和关于“为什么 ATL 向导不会生成文件”的变体搜索在这里也是空的。

因此,猜测 ProgID 字段中的“不允许使用破折号”可能会产生进一步的影响,我着手将项目名称、文件名、目录名称等中的所有破折号更改为下划线,看看会有什么影响。在整个项目中,“Some-Project”变成了“Some_Project”,而“Random-Module.*”变成了“Random_Module.*”。

将所有破折号/连字符都转换为下划线后,向导可以正确运行,并且所有预期的文件都神奇地出现了,其中包括所有必需的 COM/ATL 管道材料。

所以 。. .

1)知道为什么名称中带有破折号的项目是“合法的”,但破折号会破坏向导吗?

2) 不管是什么原因,我建议不要在 Visual Studio 项目名称中使用破折号/连字符。

4

1 回答 1

1

因为该向导使用包含项目名称的 c 和 c++ 预处理指令(宏)来生成新文件和代码,并在现有文件中生成代码,并且因为这些预处理指令无法正确理解其名称中的连字符。请参阅有关 c/c++ 宏的标准,但请记住例如您已经看到的所有宏:有很多下划线“_”来分隔名称,但没有连字符。

于 2014-01-21T08:51:10.560 回答