2016-09-22 34 views
0

我想在活動文檔中找到一個函數,但是我正在努力解決一個問題,當函數位於命名空間的內部時,我的代碼試圖獲取EnvDTE.CodeNamespace對象的成員,但它返回空,我試過了孩子也是,但也是空的。EnvDTE.CodeNamespace成員爲空?

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

我的代碼通常是這段代碼的C#實現。它掙扎於;

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

這個函數返回空的CodeElements。任何想法如何解決它?

P.S:我的擴展運行在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範圍等 - ),但從cpp文件deneme也無法正常工作。

+0

從鏈接中的代碼爲我工作。你能發佈最小的C++文件嗎?什麼是您的Visual Studio版本? –

+0

@SergeyVlasov肯定,遲到對不起,我沒有在週末檢查任何有關工作。現在編輯問題。 – mtilhan

+0

我現在可以用您發佈的C++代碼重現問題。 –

回答

2

我建議用不同的方式來獲得當前的功能:

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