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

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

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

  2. 我正在尝试的 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 参数,我需要将此句柄用于其他功能。

感谢和问候

【问题讨论】:

    标签: ruby winapi


    【解决方案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')}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多