3

我正在尝试学习如何从 Tcl 脚本访问第三方 DLL。在很多地方有很多关于这个主题的信息,但是没有一个很好的,简洁的从头到尾描述如何做到这一点。我尝试了很多事情,但都失败了。我已经使用 SWIG 和 Visual Studio Express 2012 获得了最接近成功的结果(我都是新手……)

我在How to create a DLL with SWIG from Visual Studio 2010中看到了对类似问题的先前回复,其中目标是从 C 代码创建DLL。我没有 DLL 的源代码,只有来自创建 DLL 的供应商的 .dll、.h 和 .lib 文件。

我认为,该帖子中的响应者的说明与我正在寻找的内容非常接近。他表示包装 DLL 的过程是相似的,并询问是否需要指令来完成此操作。希望他能回复这个帖子。。。

(免责声明:我也是这个论坛的新手,我无法找到直接跟进该帖子的方法。请原谅我的无知......)

谁能提供有关如何实现我的目标的详细说明?提前致谢!

4

1 回答 1

2

在我使用过的 Tcl 中有两种访问共享库的选项。

  1. 编写一个已编译的“C”扩展。这可以手动编码或通过 SWIG 完成。扩展通常只是 Tcl 解释器和共享库中的函数之间的一段粘合代码。SWIG 不是我的强项,所以其他人必须在那里帮助你。如果您编写“C”扩展,Tcl 源代码中有一个示例扩展,Tcl wiki 中有相当多的帮助。
  2. 使用通用共享对象调用者。我通常使用的是“ffidl”。一个简单的谷歌将指向它。要使用通用共享对象调用程序,您通常必须调用一些 Tcl 命令来定义被调用函数的接口,然后它处理加载库、查找入口点并实际调用函数并返回结果。

哪个最好取决于您的情况。如果库相对较小,我通常只是手动编写扩展代码。如果它很大并且我只想调用几个函数,那么我通常使用 ffidl 来完成繁重的工作。

于 2013-01-18T00:14:22.770 回答