ruby win32api вопрос по экспорту и возврату значений - PullRequest
0 голосов
/ 05 апреля 2011

Я пробую win32api из ruby.Я сталкиваюсь с двумя проблемами: -

  1. Я понимаю основную концепцию, пытаясь работать с Ruby.Иногда я получаю ошибку сегментации.Это потому, что тип параметра (который я указываю в новом) не соответствует действительному определению функции?Это, безусловно, соответствует этому наблюдению, но я не уверен.Требуется подтверждение от кого-то.

  2. API, который я пытаюсь использовать, от wlanapi.dll (http://msdn.microsoft.com/en-us/library/ms706759%28v=vs.85%29.aspx). Мне нужно автоматизировать Wi-Fi-соединения с моей машины Windows для тестирования.у функции есть и параметры _out, и возвращаемое значение. Я хотел знать, какой из них соответствует «экспорту» определения новой функции win32api (http://www.rubycentral.com/pickaxe/lib_windows.html). Я думал, что это фактическое возвращаемое значение, то есть успех или одна из ошибокВ этом случае, как мне получить другие параметры _out, такие как дескриптор, мне нужно использовать этот дескриптор для других функций.

Спасибо и С уважением

1 Ответ

0 голосов
/ 05 апреля 2011

Поскольку вы не публиковали свой вызов, я бы только догадывался, но да, возможно, ошибка сегментации возникнет из-за неправильного вызова Win32API.new.Это определяет структуру звонка.

Я не знаком с этой функцией, но, просто взглянув на определение в MSDN, я полагаю, что следующий будет правильным вызовом (при условии 32-битной платформы с 4-байтовыми указателями).Первые два параметра здесь определены как 32-разрядные целые числа без знака с 'L'.Второй фактически обрабатывается 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')}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...