Tag: rubydl

你如何使用Ruby / DL? 这是正确的吗?

我正在尝试在RSPEC(ruby风味的BDD)和Windows应用程序之间编写一个接口。 应用程序本身是用一种晦涩的语言编写的,但它有一个C API来提供访问。 我已经使用了Ruby / DL,但是即使是最基本的DLL方法调用也很困难。 这是我到目前为止,在一个名为gt4r.rb的文件中: require ‘dl/import’ module Gt4r extend DL::Importable dlload ‘c:\\gtdev\\r321\\bin\\gtvapi’ # GTD initialization/termination functions extern ‘int GTD_init(char *[], char *, char *)’ extern ‘int GTD_initialize(char *, char *, char *)’ extern ‘int GTD_done(void)’ extern ‘int GTD_get_error_message(int, char **)’ end 到目前为止,我的阅读表明这是我需要的所有内容,因此我写了一个RSPEC示例: require ‘gt4r’ @@test_environment = “INCLUDE=C:\\graphtalk\\env\\aiadev\\config\\aiadev.ini” @@normal_user = “BMCHARGUE” describe Gt4r […]

如何编写用于调用Win32函数的通用C函数?

为了允许从脚本语言(用C编写)访问Win32 API,我想编写如下函数: void Call(LPCSTR DllName, LPCSTR FunctionName, LPSTR ReturnValue, USHORT ArgumentCount, LPSTR Arguments[]) 一般来说,它会调用任何Win32 API函数。 (LPSTR参数基本上用作字节数组 – 假设它们的大小正确,以便在函数外部采用正确的数据类型。另外我认为需要一些额外的复杂性来区分指针和非指针参数但我为了这个问题的目的,我忽略了这一点。 我遇到的问题是将参数传递给Win32 API函数。 因为这些是stdcall我不能使用varargs所以’Call’的实现必须提前知道参数的数量,因此它不能是通用的… 我想我可以使用汇编代码(通过循环遍历参数,将每个参数推送到堆栈)来实现这一点但是在纯C中这是可能的吗? 更新:我已经标记了现在已经接受的“不可能”答案。 如果基于C的解决方案曝光,我当然会改变这一点。 更新: ruby / dl看起来可能使用合适的机制实现。 任何有关这方面的细节将不胜感激。