我记录了一个宏,其中包含一个F12(转到定义)的按键,但是该记录省略了传递给DTE.ExecuteCommand的第二个参数,从而导致宏在执行期间崩溃。大概第二个arg是我要查找的函数的名称,但是我不知道如何获取和传递值。如果选择函数或方法名称(而不是args或类前缀),则可以使用DTE.ActiveDocument.Selection.Text.ToString传递选择,但不是跳转到定义,而是返回两者。查找符号结果窗口中的h文件和.cpp文件。
(而且我不确定选择是否确实是我想要的,尽管如果可以的话,我可能可以让宏选择“正确的东西”。是否有任何方法可以查看F12正在传递的内容,而仅是查看什么)还是更好,找出哪些编程对象F12正在传递?
Vs2010 Pro
最佳答案
事实证明,通过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。
关于c++ - 如何在VS2010 C++宏中使用DTE.ExecuteCommand (“Edit.GoToDefinition”)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20168945/