В Win32API.new в Ruby разве «L» - это не то же самое, что «I», а как насчет «N» или «P»? - PullRequest
1 голос
/ 25 июля 2010

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

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

Нет логического параметра как 'B' или 'I', только возвращаемое значение ...

В http://www.ruby -doc.org / STDLIB / libdoc / Win32API / RDoc / классы / Win32 / Реестр / error.html # M001622

Есть

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

вместо более распространенного ['L', 'P', 'L', ...] формата

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

Логический параметр равен 'B' и совпадает с 'I'?

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

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

Ответы [ 2 ]

1 голос
/ 25 июля 2010

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

1 голос
/ 25 июля 2010

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

Win32Api действительно ужасен, и я бы рекомендовал не использовать его.Вы можете взглянуть на FFI - Интерфейс внешних функций и примеры или примеры Windows .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...