2016-09-22 3 views
0

Ich versuche, eine Funktion im aktiven Dokument zu finden, aber ich kämpfe mit einem Problem, wenn die Funktion innerhalb eines Namespace ist, versucht mein Code, die Mitglieder des EnvDTE.CodeNamespace-Objekts zu erhalten, aber es leer zurückkehrt, habe ich versucht Kinder auch, aber es war auch leer.EnvDTE.CodeNamespace Mitglieder sind leer?

http://www.mztools.com/articles/2006/MZ2006009.aspx

Mein Code ist in der Regel C# -Implementierung dieses Codes. Es kämpft um;

If TypeOf objCodeElement Is EnvDTE.CodeNamespace Then 
    colCodeElements = CType(objCodeElement, EnvDTE.CodeNamespace).Members 

Diese Funktion gibt leere CodeElements zurück. Irgendeine Idee, wie man es löst?

S.: Meine Erweiterung läuft auf C++ - Dateien.

Bearbeiten: Senden der Testcodes.

#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); 
}; 

Problem ist, dass es die Funktionen von wmain und deneme2 an CPP-Datei (Header-Datei arbeiten auch nicht, dass es etwas gibt wie -over reichen etc.-) findet aber Auch derenem aus cpp-Datei funktioniert nicht.

+0

Der Code aus dem Link funktioniert für mich. Können Sie eine minimale C++ - Datei posten, mit der Sie ein Problem haben? Was ist Ihre Visual Studio-Version? –

+0

@SergeyVlasov sicher, Entschuldigung für Verspätung, habe ich nichts überprüft Arbeit am Wochenende. Bearbeiten Sie die Frage jetzt. – mtilhan

+0

Ich kann jetzt das Problem mit dem C++ Code reproduzieren, den Sie gepostet haben. –

Antwort

2

Ich empfehle eine andere Art und Weise aktuelle Funktion zu erhalten:

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);