2013-11-23 25 views
0

我錄製了一個包含F12按鍵(轉到定義)的宏,但錄製忽略了傳遞給DTE.ExecuteCommand的第二個參數,導致宏在執行過程中崩潰。大概第二個參數是我想要找到的函數的名稱,但我無法弄清楚如何獲取和傳遞值。如果我選擇函數或方法名(但不是args或類前綴),我可以使用DTE.ActiveDocument.Selection.Text.ToString來傳遞選擇,但不是跳轉到定義,而是返回兩者。 h文件和查找符號結果窗口中的.cpp文件。我不確定選擇是否真的是我想要的,雖然我可能會讓宏選擇「正確的事情」,如果這是要走的路,是否有任何方法可以看到F12的傳遞,只是爲了看看是什麼樣子或者更好的是,找出程序對象F12是通過如何在VS2010 C++宏中使用DTE.ExecuteCommand(「Edit.GoToDefinition」)?

VS2010臨

+0

帶有DTE.ExecuteCommand(「Edit.GoToDefinition」)的TemporaryMacro在沒有第二個參數的機器上工作得很好。 –

+0

什麼版本的VS?什麼語言?你是如何運行宏的? – Llaves

+0

VS 2010 Ultimate,C#,宏 - 運行TemporaryMacro。現在嘗試一個C++項目,並得到「命令需要一個參數」的錯誤。 –

回答

1

原來運行相同的命令通過IVsUIShell工作:??

Dim cmd As EnvDTE.Command 
    Dim shell As Microsoft.VisualStudio.Shell.Interop.IVsUIShell 
    Dim arg As Object 
    Dim guid As System.Guid 
    Dim serviceProvider As System.IServiceProvider 

    serviceProvider = New Microsoft.VisualStudio.Shell.ServiceProvider(CType(DTE, Microsoft.VisualStudio.OLE.Interop.IServiceProvider)) 
    shell = serviceProvider.GetService(GetType(Microsoft.VisualStudio.Shell.Interop.SVsUIShell)) 
    cmd = DTE.Commands.Item("Edit.GoToDefinition", 0) 
    guid = New System.Guid(cmd.Guid) 
    shell.PostExecCommand(guid, cmd.ID, 0, arg) 

代碼像Visual Commander一樣工作。從Visual Studio ma運行它CRO公司IDE,您需要將引用添加到

Microsoft.VisualStudio.OLE.Interop.dll 
Microsoft.VisualStudio.Shell.10.0.dll 
Microsoft.VisualStudio.Shell.Interop.dll 
Microsoft.VisualStudio.Shell.Interop.8.0.dll 
Microsoft.VisualStudio.Shell.Interop.9.0.dll 

,並添加您首先需要將這些文件複製到Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies directory引用。