与导出和返回值相关的 ruby​​ win32api 问题

Posted

技术标签:

【中文标题】与导出和返回值相关的 ruby​​ win32api 问题【英文标题】:ruby win32api question related to export and return values 【发布时间】:2011-04-05 14:29:18 【问题描述】:

我正在试用 ruby​​ 的 win32api。我面临两个问题:-

    我了解基本概念,并尝试使用 Ruby。我有时会遇到分段错误。是因为参数类型(我在新指定的)与实际的函数定义不匹配吗?它当然符合那个观察,但我不确定。希望得到某人的确认。

    我正在尝试的 API 来自 wlanapi.dll(http://msdn.microsoft.com/en-us/library/ms706759%28v=vs.85%29.aspx)。我需要从我的 Windows 机器自动化 wifi 连接以进行测试。如您所见,该函数同时具有 _out 参数和返回值。我想知道其中哪些对应于 win32api 新函数定义的“导出”(http://www.rubycentral.com/pickaxe/lib_windows.html)。我认为这是实际的返回值,即成功或错误消息之一。在那种情况下,我如何获得像句柄这样的其他 _out 参数,我需要将此句柄用于其他功能。

感谢和问候

【问题讨论】:

【参考方案1】:

由于您没有发布您的电话,我只能猜测,但是是的,分段错误可能来自无效的 Win32API.new 电话。这定义了调用的结构。

我不熟悉该函数,但仅查看 MSDN 上的定义,我相信以下将是对它的有效调用(假设具有 4 字节指针的 32 位平台)。此处的前两个参数定义为带有“L”的 32 位无符号整数。第二个实际上被 API 视为一个指针,但应该是 NULL,所以传递一个零应该是可以的。最后两个参数是指针。 'I' 表示一个整数返回值。

negver = [0].pack('L') 创建一个 4 字节“字符串”,作为接收 4 字节协商版本值的指针。在实际调用中,我并不完全确定第一个参数;您可能需要根据您的环境进行调整。

api = Win32API.new( 'wlanapi', 'WlanOpenHandle', ['L', 'L', 'P', 'P'], 'I')
negver = [0].pack('L')
handle = [0].pack('l')  # this assumes 4 byte pointer
ret = api.call( 2, 0, negver, handle )
puts "WlanOpenHandled returned #ret"
puts "Negotiated version: #negver.unpack('L'), Handle is #handle.unpack('L')"

【讨论】:

以上是关于与导出和返回值相关的 ruby​​ win32api 问题的主要内容,如果未能解决你的问题,请参考以下文章

IOCtlSocket Ruby Winapi

WSAGetLastError()的返回值

dl/win32 加载错误

Win32多线程之核心对象

从 ispc 导出的函数中按值返回结构?

Win32:将子消息转发给父 - 返回值不同