私は次のことを知っています:
'L'
- 長いです'P'
- ポインター'I'
- 整数'V'
- 空所
私の問題は、API 呼び出しを実行するときに null ポインターを渡すことができないことです。例: ['L', 'P', 'L'] -> api.call(0, nil, 0) :: ArgumentError: Null pointer given
. 私の質問は次のとおりです。私が知らないパラメーターの型が他にもありますか?メソッドのパラメーターとして null ポインターを渡すにはどうすればよいですか?
バックグラウンド
WinForms ベースのアプリケーションのネイティブ Ruby プログラミングの例をインターネットで検索してきました。コーディングを簡単にするために、IronRuby として知られる Ruby への .NET の追加を検討しました (wxRuby を避けようとしており、.NET ファンでもあります) が、まずは純粋な Ruby で明示的にコーディングできるようにしたいと考えています。
これで、次のような user32.dll オブジェクトでテストしたほとんどのアドレスを正常に実装できました。
api = Win32API.new('user32', 'MessageBox', ['L', 'P', 'P', 'L'], 'I')
# or
api = Win32API.new('user32', 'MessageBeep', ['L'], 'I')
..しかし、 null パラメーターなしでCreateWindow
Orを実行することはできません。CreateWindowEx
それが助けになる場合は、Python here (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)
「ウィンドウ」が表示された後に発生するのはクラッシュだけです...これは、不適切な処理が原因である可能性がありますが、動作するようになったことを嬉しく思います(少しだけ)! 残りを把握する必要があります...