2012-03-30 162 views
0

我有一个TCL应用程序,它只能在Windows上运行,并使用twapi来访问一些Windows特定的功能。从tcl通过twapi调用DLL函数

现在我需要调用一些定制DLL中的C函数。

我知道我可以加载的DLL与twapi::load_library(应该是相同的LoadLibraryEx()),但我不明白如何在DLL本身内调用一个函数!

我错过了什么?

我宁愿避免其他依赖项(例如critcl),并避免必须在tcl扩展中转换当前dll(例如通过SWIG),所以仅适用于twapi解决方案将非常有帮助!

回答

1

TWAPI似乎没有提供GetProcAddress(用于从名称获取到DLL中函数地址的Windows API函数)的任何公共绑定。

对于简单的API(即没有回调的地方)或critcl(对于各种API,包括那些有回调的API,因为它可以做更多的代码生成;尽管使用更多的努力)使用ffidl。

+2

对'GetProcAddress'的支持不够,因为在执行对外部代码的调用时,必须编组和解组参数。这就是为什么像ffidl这样复杂的框架确实存在的原因。那么,它甚至有点奇怪''twapi'支持加载DLL,如果它以后不能做任何有用的事情;-) – kostix 2012-03-30 13:26:03

+0

@kostix这几乎是我的想法。 – 2012-03-30 14:29:05

+0

是的,有了load_library让我希望我有一些其他的方式来调用一个普通的函数。我可以使用源代码来修改未记录的twapi :: Call函数。但我可能不会。 – 2012-03-30 18:40:21

0

看起来你必须使用ffidl来完成这项工作。

+0

谢谢kostix,我希望避免另一个依赖,因为twapi必须处理DLL。 ffidl或critcl将是我的后备。 – 2012-03-30 13:04:10

1

twapi的load_library命令用于操纵dll(字符串表,图标等)中的资源。它不是为了调用dll中的函数,因为Donal指出需要编组和生成代码。