gpt4 book ai didi

ruby - 如何在 Ruby 中使用 Win32API 从 DLL 返回字符串

转载 作者:数据小太阳 更新时间:2023-10-29 08:13:00 34 4
gpt4 key购买 nike

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

ruby 代码

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 中检索字符串的正确方法是什么。

最佳答案

不是我在 ruby​​ 方面的强项,但我发现这个问题很有趣。 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

关于ruby - 如何在 Ruby 中使用 Win32API 从 DLL 返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13881721/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com