Я знаю следующее:
'L'
- Long 'P'
- Указатель 'I'
- Целое число 'V'
- Void
Моя проблема в том, что я не могу передать нулевой указатель при выполнении вызова API.Например: ['L', 'P', 'L'] -> api.call(0, nil, 0) :: ArgumentError: Null pointer given
.Мой вопрос: есть ли еще типы параметров, о которых я не знаю, и что мне нужно сделать, чтобы передать нулевой указатель в качестве параметра метода?
Фон
Я искал в Интернетедля собственных примеров программирования на Ruby приложений на основе WinForms.Я рассмотрел дополнение .NET к Ruby, известное как IronRuby, для простоты в кодировании (пытаясь избежать wxRuby, а также вентилятора .NET), но сначала я хочу иметь возможность сначала явно кодировать на чистом Ruby.
Теперь я успешно смог реализовать большинство адресов, которые я тестировал в объекте user32.dll, таких как:
api = Win32API.new('user32', 'MessageBox', ['L', 'P', 'P', 'L'], 'I')
# or
api = Win32API.new('user32', 'MessageBeep', ['L'], 'I')
.. но я не могу выполнить CreateWindow
или CreateWindowEx
без нуляпараметры.Если это поможет, я нашел, как это сделать в Python здесь (под WinAPI).
Использование Win32API: msdn.microsoft.com/en-us/library/ff381397 (v = VS.85) .aspx
[РЕДАКТИРОВАТЬ]
Ну, я думаю, что я, возможно, только что решил свою собственную проблему с этой ссылкой (предупреждение: можетсодержит неприемлемое содержание) : [ссылка]
Я больше использовал этот форум в качестве ссылки и немного повозился с собой:
createwindow = Win32API.new("user32","CreateWindowEx",'lpplllllllll','l')
showwindow = Win32API.new('user32','ShowWindow',%w(l l),'l')
hWND = createwindow.call((0x00000100|0x00000200),"static", "Window Title",((0x4000000|0x80000000|0)|0x02000000),0,0,600,400,0,0,0,0)
showwindow(hWND, 1)
Единственное, что происходит после отображения «окна», это сбой ... и это могло произойти из-за неправильной обработкиНо я счастлив, что получил его на работу (немного)!Просто надо разобраться с остальными ...