编译 VisualD
VisualD是一个vs插件,安装后就可以使用D语言来开发应用程序了。这是一个开源项目,下载下来自己编译一个试试,随便学习一下大师们是怎么样来做VS插件的。VisualD可以从https://github.com/dlang/visuald下载得到。解压后有vs工程:
VisualD编译时固定需要DMD2.066版本编译器,不要使用其它版本(目前为止),正好与DGUI一样,真不错,下面我们来编译一下吧。visuald网站上看,有介绍
编译VisualD需要
一、先安装Visual Studio SDK,这个不是VS,这个是用来开发VS扩展程序的库, 我使用的是VS2013,所以我下载了个Visual Studio SDK,这是一个微软提供给开发人员的库,用于开发VS插件,不同的VS有不同的库,可以在msdn上搜索Visual Studio SDK 2013就可以得到。VS2013 SDK下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=40758
VS扩展程序开发在微软网站上有详细介绍https://msdn.microsoft.com/en-us/library/bb166441.aspx VS扩展程序的例子程序可以从这里找到大量例子:https://github.com/Microsoft/VSSDK-Extensibility-Samples VS2013扩展程序例子可以从https://code.msdn.microsoft.com/windowsdesktop/VIsual-Studio-2013-SDK-728822a7 下载,
下载好VS2013 SDK后,进行安装
如果你使用的是vs2008的就安装vs2008 sdk。安装完成后进入第二步。
二、打开visualD工程visuald_vs10.sln文件。
三、编译build项目,如图
编译后出错,如下图
错误出现在编译build.sdk文件中,提示错误ERROR: Cannot determine the location of the VS Common Tools folder.
意思是找不到VS Common Tools(VS通用工具)目录,没找到iviewer.dll文件,这是个什么文件,我在C语中搜索,我的经常使用的软件都安装在C盘,所以在C盘搜索,只要有基本上都能找得到。
搜索结果真的找到了。原来是Microsoft SDKs中的一个工具,那么这个错误应该是路径不对,知道原因了,再看看编译日志
原来是在调用dte_idl.bat 时出错了,再一看发现原来现在在编译debug版本,先改为Release再重新编译一下,还是同样错误。来看看dte_idl.bat这个批处理吧,传了两个参数进去,一个是..\bin\Release\tlb2idl.exe 和dte_idl.success两个文件。
看到了这句
iviewer.dll not found是在这里输出的,也就是说WindowsSdkDir这个变量不对,所以才会找不到这个文件,使用echo来看一下这个变量是什么值。在dte_idl.bat中加入以下语句后重新编译build工程
WindowsSdkDir为空,原来如此。在系统里加一个环境变量,再来试一下:
从上面知道刚才的iviewers.dll找不到的事情已经解决,但在后面的编译里又出现问题,
还是WindowsSdkDir没设置,怎么回事,不是我已经设置了吗? 这次是在调用sdk.bat时到不到WindowsSdkDir变量了,估计是系统变量还没有生效,把VS重起一下再重新编译。在编译到下面这步时,需要等待很长时间,因为软件在做转换工作,把c语言的.h文件自动转换成d语言可以使用的格式.d文件,运行时提示vsi需要重新加载,确定就行。
编译到sdk_libs里又出错了
这里什么,原来还用到了coffimplib.exe这个工具,这个工具是dmc,也就是dmd1.0里的一个工具,这个工具可以从下面网站上下载:http://ftp.digitalmars.com/ 下载好后,修改这个文件指到你自己的文件,我的设置如下图
三、该编译VisualD了,直接编译VisualD工程,出错
这是在编译Resources\pkgcmd.vsct时出错,无效参数文件,这真是一个需要耐心的事情。
这是在使用vsct.exe处理pkgcmd.vsct资源文件时出错了,能走到这一句,说明vsct.exe已经找到了,那么这一句为什么出错呢?
来用cmd测试一下这个处理过程吧
编译并没有出错,原因可能是因为路径中有空格,需要打上又引号才行,而编译的处理程序没有加,所以出错了。这个问题如何解决,应该需要搞清楚visuald是在哪里调用VSCT.exe的,需要修改才行。经过分析发现,visuald是使用.visualdproj文件来配置项目,打开visuald.visualdproj文件找到:no_VSCT部分:
修改好后继续编译,到编译visuald.res里又出错,找不到rc命令
我在c盘换到我的rc.exe在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin目录,把这个目录设置到系统Path中去:
设置好后继续编译,在编译到logutil.d里出错,将出错的断言去掉
终于编译完成了。~~~~~~~~~~~~~~~~~~~~~~~
哈哈哈
总结一下:
VisualD真是一个很有意义的工程
1. 使用了coffimplib.exe工具把SDK中微的lib转换为可以调用的lib
2. 在c2d工程里实现了c.h转化为d语言使用的格式
3. 在cpp2d工程里实现了cpp.h转化为d语言使用的格式
4. 在parser工程里实现了D语言的词法解析
5. 在vsi2d工程里实现了vsi到d语言的转换
6. 成功实现了d语言调用VS SDK的功能
真是大牛们呀~~~~~~~~~~~~~~~~~~`