2010-07-25 2 views
1

В некоторых документах Win32API от Ruby имеет 'L' и 'N', чтобы указать «число» ... и в некоторых документах 'L' «длинный». Является ли 'N' устаревшим, а не 'L' таким же, как 'I'? «Число» несколько не так специфично.В Win32API.new Ruby не является «L» таким же, как «I», а что же «N» или «P»?

В http://rubyforge.org/docman/view.php/85/3463/API.html#M000001

Там нет указания булево значение, как 'B' или 'I', только возвращаемого значения ...

В http://www.ruby-doc.org/stdlib/libdoc/Win32API/rdoc/classes/Win32/Registry/Error.html#M001622

Существует

Win32API.new('kernel32.dll', 'FormatMessageA', 'LPLLPLP', 'L') 

вместо более c ommon ['L', 'P', 'L', ...] формат

hWnd есть 'L' и поэтому 'I' тоже будет работать? (hWnd - ручка для окна)

Булев параметр 'B' и такой же, как у 'I'?

Итак, в основном, мы можем использовать большинство вещей как 'I'? Даже 'P' должен быть 4-байтовым, поэтому 'I' должен работать так же хорошо? Существует ли более формальная спецификация?

Update: теперь, когда я думаю больше о 'P', он на самом деле будет использовать объект класса String, рубин, и принять буферную содержание части и передать его в функцию C. Поэтому использование 'I', вероятно, не вызовет такого поведения. (пример: например, использование GetWindowText())

ответ

1

Я смотрю на win32-api исходный код, и это выглядит как единственное различие между «L» и «I», что «L» называет rb_num2ulong и «Я» называет в <ruby.h>rb_num2int. Поэтому, я думаю, единственное различие заключается в том, что лечение является знаковым значением или нет. «P» также приводит к rb_num2ulong, но он следует дополнительной логике, поэтому я, вероятно, придерживаюсь того, что предлагает документация. Я не могу найти упоминания о «N» в последней версии win32-api (1.4.5), поэтому он, вероятно, не рекомендуется. API Windows не возвращает boolean, но некоторые возвращают BOOL, что является (сюрпризом!) int. Короче говоря, я не думаю, что вы должны использовать «я» для всего. Документация win32-api довольно скудна из того, что я видел. По крайней мере, исходный код доступен для просмотра.

+0

Я также видел в документе README в файле win32-api zip: 'Удалены прототипы 'N' и 'n'. Всегда используйте «L» для долгого времени. ' –

1

L может быть таким же, как и я, но поскольку я существую, я бы предположил, что он представляет «короткий» (C-Standard не указывал длину «целого») , P может быть таким же, как L - по крайней мере, если вы используете 32-битный рубин.

Win32Api действительно уродливый, и я рекомендую не использовать его. Вы можете взглянуть на FFI - Foreign Function Interface и examples или Windows examples.

+0

Книга PickAx для Ruby 1.9 также рекомендуется использовать 'DL', но я попробовал' gem install dl', и ее не существует. –

+0

'dl' должен быть включен с ruby ​​- попробуйте' dll'. Но документация для 'dl' еще хуже. –

Смежные вопросы