首先安装vs2008,在选择安装选项时,要将“X64 编译器和工具”选项选中,必须手动进行选中。即使选择界面上的全部安装,“X64 编译器和工具”也是不被安装的。
如果很不幸,在启动vs2008后发现“X64 编译器和工具”确实没有被安装,就关闭vs2008,重新运行安装程序,不过不需要从新安装:
更改或移除vs2008 -> 添加或删除功能 -> 选中Visual C++ 下的X64 编译器和工具 更新即可。
接下来开始编译Tcl扩展库:
1、新建项目
选择 Win32 -> Win32控制台应用程序 或者 Win32项目 两个任意选择,原因是在后面的“应用程序设置”里还要选择,这里选择DLL。附加选项 随意选,建议选择导出符号,会自动生成几个文件,并且会有小例子。或者选择空项目,在里面新建cpp 和 h文件然后再添加到项目。
2、添加Tcl库函数和包含文件
工具 -> 选项 -> VC++项目
平台: x64
包含文件添加: D:\Tcl\include
库文件添加: D:\Tcl\lib 根据自己的安装目录
3、解决方案平台配置
生成 -> 配置管理器
活动解决方案任意选,最终是要选择Release的
活动解决方案平台:新建 -> 选择x64
4、配置项目属性
项目 -> 属性 -> 配置属性
C/C++下的 预编译头 选择 不使用预编译头。 不然会出现 *.pch”: No such file or directory
C/C++下的 常规 附加包含目录中添加 D:\Tcl\include
链接器下的 常规 附加库目录添加 D:\Tcl\lib
链接器下的 输入 附加依赖项添加 tcl86.lib 解决error : 无法解析的外部符号 error LNK2019: 无法解析的外部符号
5、代码
在自己的cpp文件中
#include "stdafx.h"
#include "tcl.h"
static int Hello_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
Tcl_SetObjResult(interp, Tcl_NewStringObj("Hello, World!", -1));
return TCL_OK;
}
extern "C" __declspec(dllexport) int Hello_Init(Tcl_Interp *interp)
{
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL)
{
return TCL_ERROR;
}
//给定版本号
if(Tcl_PkgProvide(interp, "hello", "1.0") == TCL_ERROR)
{
return TCL_ERROR;
}
Tcl_CreateObjCommand(interp, "hello", Hello_Cmd, NULL, NULL);
return TCL_OK;
}
在init 函数中必须添加extern "C" __declspec(dllexport) ,不然编译通过也无法使用。
如果是新建的一个空项目,没有stdafx.h文件,要在此cpp文件中添加 #include <windows.h>
6、编译
编译 + 启动调试 生成hello.dll
7、使用
将Release目录下的hello.dll拷贝到 tcl安装目录中的bin
启动 tcl 窗口
加载新生成的动态库 load hello.dll
输入 hello
输出 hello , World 编译tcl扩展库成功