这段代码是我想生成的(c ++)
X::X()
{
}
但是,下面的 AddFunction 调用会生成一个返回类型的函数(源是表示 cpp 源文件的 FileCodeModel):
source.AddFunction("X::X" , vsCMFunction.vsCMFunctionConstructor, null, -1,vsCMAccess.vsCMAccessDefault);
将 null 替换为以下任何返回类型都没有区别:
"X"
vsCMTypeRef.vsCMTypeRefVoid
vsCMTypeRef.vsCMTypeRefCodeType
vsCMTypeRef.vsCMTypeRefOther
所有这些都会产生一个返回类型的函数,如下所示,甚至指定了艰难的 vsCMFunctionConstructor:
int X::X()
{
}
使用 FileCodeModel 接口,如何生成一个简单的构造函数,即没有返回类型的函数?
这是重现我的问题的最简洁的代码。
好吧,看看你的示例项目,我想我可以看到问题所在。
您打开了.cpp文件上的FileCodeModel
,并且正在向其添加函数 - 但没有类。
此外,要生成C++,应确保使用 VCCodeModel
.
你应该做的是先创建一个类,然后将构造函数添加到类中。 像这样:
// get IDE
EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.12.0");
// select the second project (pre-created as in your example)
var project = dte.Solution.Projects.Item(2);
// get the VC code model
VCCodeModel pModel = (VCCodeModel)project.CodeModel;
// create a class in the header (also creates header if not existing)
var pClass = pModel.AddClass("X", "test.h");
// add the constructor implementation in the cpp file
pClass.AddFunction("X", EnvDTE.vsCMFunction.vsCMFunctionConstructor, null,
0, EnvDTE.vsCMAccess.vsCMAccessDefault, "test.cpp");
这会在test.h
文件中正确生成以下代码:
class X
{
X(void);
};
以及以下test.cpp
文件:
#include "test.h"
X::X(void)
{
}