如何在VS2010 C ++宏中使用DTE.ExecuteCommand(“Edit.GoToDefinition”)?

时间:2013-11-23 22:54:56

标签: c++ vba visual-studio-2010

我录制了一个包含按键F12(转到定义)的宏,但是录音省略了传递给DTE.ExecuteCommand的第二个参数,导致宏在执行期间崩溃。据推测,第二个arg是我想要找到的函数的名称,但我无法弄清楚如何获取并传递该值。如果我选择函数或方法名称(但不是args或类前缀),我可以使用DTE.ActiveDocument.Selection.Text.ToString来传递选择,但不是跳转到定义,而是返回两者。 h文件和查找符号结果窗口中的.cpp文件。

(而且我不确定选择是否真的是我想要的,虽然我可能会让宏选择“正确的东西”,如果这是要走的路。有没有办法看看F12传递的是什么,只是看看它是什么样的?或者更好的是,找出F12正在传递的程序对象?

Vs2010 Pro

1 个答案:

答案 0 :(得分:2)

通过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宏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