Я пытаюсь найти функцию в активном документе, однако я борюсь с проблемой: когда функция находится внутри пространства имен, мой код пытается получить члены объекта EnvDTE.CodeNamespace, но он возвращает пустое значение, я тоже пробовал Children но там тоже было пусто.
http://www.mztools.com/articles/2006/MZ2006009.aspx
Мой код, как правило, C # реализация этого кода. Это борется в;
If TypeOf objCodeElement Is EnvDTE.CodeNamespace Then
colCodeElements = CType(objCodeElement, EnvDTE.CodeNamespace).Members
эта функция возвращает пустые CodeElements. Есть идеи как это решить?
П.С .: Мое расширение работает с файлами C ++.
Изменить: размещение тестовых кодов.
#include "stdafx.h"#include "Header.h"namespace ns_deneme{
int zaza::func_deneme(int k)
{
a = k;
return a;
}
}
int wmain(int argc, wchar_t* argv[])
{
xaxa a;
int ba = a.deneme2(5);
}
int xaxa::deneme2(int a){
return a;
}
header.h
namespace ns_deneme{
class zaza{
private:
int a;
int func_deneme(int k);
};
}
class xaxa{
public:
int deneme2(int a);
};
Проблема в том, что он находит функции wmain и deneme2 в файле cpp (заголовочный файл также не работает, он дает что-то вроде -over range и т. Д.), Но также не работает deneme из файла cpp.
Я рекомендую другой способ получить текущую функцию:
EnvDTE.TextSelection ts = DTE.ActiveWindow.Selection as EnvDTE.TextSelection;
if (ts == null)
return;
EnvDTE.CodeFunction func = ts.ActivePoint.CodeElement[vsCMElement.vsCMElementFunction]
as EnvDTE.CodeFunction;
if (func != null)
System.Windows.MessageBox.Show(func.FullName);
Других решений пока нет …