【IT168 技术】光把CUDA SDK中的usertype.dat文件复制到IDE目录下,只能让VS支持CUDA的关键字高亮显示;而VS好用的代码折叠却不能应用到CU文件上,真是让人气愤.于是我就翻翻注册表,发现了可以让VS支持CU文件代码折叠的方法:
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\[XXX]\Languages\Language Services\C/C++
下,向"NCB Default C/C++ Extensions"项里追加.cu;即可,譬如".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.cu;"
注释:[XXX]是你的VS版本号.
如此一来,重启VS即可开到CU文件也享用到代码折叠服务!
再来说一下打印服务的问题,原本VS里面代开CU文件,可以看到打印按钮和菜单项是Disabled的,这可急煞人了,大家知道VS可以提供代码高亮和现实行号功能,这样打印出来的代码非常清晰工整,但是现在VS死活不让我们打印CU文件,不知道MS心里的什么.
那么如何解决呢,其实VS的打印功能的启用/禁用是通过宏来实现的,我们打开宏管理器,编辑VSEditor模块里的IsPrintableFile函数,向其中添加.cu的支持,修改后的代码如下:
Dim fileName As String
Dim extensions As New System.Collections.Specialized.StringCollection
' 如果添加到项目的文件属于可以打印的类型,
' 则将该文件类型的扩展名添加到以下列表:
extensions.AddRange(exts)
fileName = projItem.FileNames(1)
Return extensions.Contains(System.IO.Path.GetExtension(fileName).ToLower())
End Function
然后重新打开CU文件,你就会发现VS已经让你打印它了.
这里说明一下,还有几个宏函数没有提供对CUDA的支持,您可以参考下面的代码一并给他改了:
Utilities模块:
''
'' 此模块和其他模块的 Helper 函数。
''
Dim extension As String
If (document Is Nothing) Then
document = DTE.ActiveDocument
End If
extension = document.Name
If (extension.EndsWith(".cs") Or extension.EndsWith(".cpp") Or extension.EndsWith(".cu") Or extension.EndsWith(".h") Or extension.EndsWith(".idl") Or extension.EndsWith(".jsl")) Then
Return "//"
ElseIf (extension.EndsWith(".vb")) Then
Return "'"
Else
Throw New Exception("Unrecognized file type. You can add this file type by modifying the function Utilities.LineOrientedCommentStart to include the extension of this file.")
End If
End Function
DevStudio6Editor模块
Function FileType(ByVal doc As EnvDTE.Document) As Integer
' 如果要确定源文件的类型,此例程有多种
' 用途。
' 返回值: 0 文件类型未知
' 1 与 C 相关的文件,包括 .c、.cpp、.cxx、.h、.hpp 和 .hxx
' 2 与 Java 相关的文件,包括 .jav 和 .java
' 3 ODL 样式的文件,包括 .odl 和 .idl
' 4 资源文件,包括 .rc 和 .rc2
' 5 HTML 样式的文件,包括 .html 和 .htm
' 6 VBS 样式的文件: .dsm
' 7 Def 样式的文件: .def
' 用途: 向此函数传递要获取其信息的文档。
Dim ext As String
ext = doc.Name
FileType = 0
pos = InStr(ext, ".")
If pos > 0 Then
Do While pos <> 1
ext = Mid(ext, pos, Len(ext) - pos + 1)
pos = InStr(ext, ".")
Loop
ext = LCase(ext)
End If
If ext = ".rc" Or ext = ".rc2" Then
FileType = 4
ElseIf doc.Language = EnvDTE.Constants.dsCPP Then
FileType = 1
ElseIf ext = ".cu" Then
FileType = 1
ElseIf doc.Language = EnvDTE.Constants.dsJava Then
FileType = 2
ElseIf doc.Language = EnvDTE.Constants.dsIDL Then
FileType = 3
ElseIf doc.Language = EnvDTE.Constants.dsHTML_IE3 Then
FileType = 5
ElseIf ext = ".xml" Then
FileType = 5
ElseIf doc.Language = EnvDTE.Constants.dsHTML_RFC1866 Then
FileType = 5
ElseIf doc.Language = EnvDTE.Constants.dsVBSMacro Then '
FileType = 6
ElseIf ext = ".def" Then
FileType = 7
Else
FileType = 0
End If
End Function
最后说明一点,以上所有操作均是建立在您已经完整的对VS添加了CUDA支持的情况上,如果您的VS无法正常建立和编译CUDA工程的话,那么请先搜索如何对VS添加了CUDA支持的教程并按部就班的设置好您的VS.如果您不这样做,很可能导致我这篇修改教程里的部分设置不能很好的发挥作用。
更多内容请点击:
CUDA专区:http://cuda.it168.com/
CUDA论坛:http://cudabbs.it168.com/