3

目前我只能在 Ruby 中使用 win32api,所以没有 ffi 等。在 Ruby 中,我正在加载一个 DLL 并传递一个字符串,我希望返回相同的字符串。这是代码:

红宝石代码

string = "hello"
p = Win32API.new('C:/func/testFunc', 'Print', ['P'], 'S')
p.call(string)

输出

=> 7476721

动态链接库

extern (C)export char* Print(char* am)
{  
   return am;
}

我得到的是数字而不是“你好”。我猜这是我刚刚传递给 dll 的值的地址。有人可以告诉我从 DLL 中检索字符串的正确方法是什么。

4

1 回答 1

0

不是我在红宝石方面的专长,但我发现这个问题很有趣。Win32API 采用和返回(通常)指针作为数据类型。这意味着您应该传递变量指针,DLL 将编辑指针。您可以根据需要对它们进行打包和解包(Win32API 规范很糟糕这一事实没有帮助)。这里有一些很好的例子:

http://www.rubytips.org/2008/05/13/accessing-windows-api-from-ruby-using-win32api-library/

我认为没有“S”的返回(导出)类型。唯一有效的选项是 n、l、i 和 p。在此处查看此文档:http ://www.ruby-doc.org/docs/ProgrammingRuby/html/lib_windows.html

于 2013-01-22T16:32:19.447 回答