我知道以下内容:
'L'
- 长'P'
- 指针'I'
- 整数'V'
- 空白
我的问题是执行 API 调用时无法传递空指针。例如:['L', 'P', 'L'] -> api.call(0, nil, 0) :: ArgumentError: Null pointer given
。我的问题是:是否有更多我不知道的参数类型以及我应该怎么做才能将空指针作为方法参数传递?
背景
我一直在互联网上搜索基于 WinForms 的应用程序的原生 Ruby 编程示例。为了简化编码(试图避免使用 wxRuby,并且也是 .NET 的粉丝),我考虑了 Ruby 的 .NET 附加组件 IronRuby,但我首先希望能够首先在纯 Ruby 中显式编码。
现在,我已经成功地实现了我在 user32.dll 对象中测试过的大多数地址,例如:
api = Win32API.new('user32', 'MessageBox', ['L', 'P', 'P', 'L'], 'I')
# or
api = Win32API.new('user32', 'MessageBeep', ['L'], 'I')
..但是我不能在没有空参数的情况下执行CreateWindow
Or 。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)
显示“窗口”后唯一发生的事情是崩溃......这可能是因为一些不正确的处理,但是,我很高兴我让它工作(一点点)!只需要弄清楚其余的...