FileCodeModel::AddFunction генерирует функцию с возвращаемым типом при передаче vsCMFunctionConstructor

Этот кусок кода - то, что я хочу генерировать (C++)

X::X()
{
}

Тем не менее, вызов AddFunction ниже генерирует функцию с типом возврата (источником является FileCodeModel, представляющий исходный файл cpp):

source.AddFunction("X::X" , vsCMFunction.vsCMFunctionConstructor, null, -1,vsCMAccess.vsCMAccessDefault);

Замена нуля любым из этих типов возврата не имеет значения:

"ИКС"

vsCMTypeRef.vsCMTypeRefVoid

vsCMTypeRef.vsCMTypeRefCodeType

vsCMTypeRef.vsCMTypeRefOther

Все эти результаты приводят к функции с типом возвращаемого значения, как показано ниже, даже если указан жесткий vsCMFunctionConstructor:

int X::X()
{
}

Используя интерфейс FileCodeModel, как я могу сгенерировать простой конструктор, то есть функцию без возвращаемого типа?

Вот самый минимальный код для воссоздания моей проблемы.

1 ответ

Решение

Ну, глядя на ваш пример проекта, я думаю, что вижу проблему.

Вы открыли FileCodeModel в файле.cpp, и вы добавляете к нему функцию - но класса нет.

Кроме того, для генерации 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)
{
}
Другие вопросы по тегам