rubyでwin32ライブラリのいくつかの関数にアクセスする必要があります。私は、Win32APIクラスのオンラインで非常に疎な情報を発見したので、私はここで尋ねています。ruby win32 api interface
私はあなたがこのような何かができることを知っている:
function = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')
をしかし、私は、現在のwin32バインディングでこの関数を呼び出すことができるように見えることはできません。
http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx
問題はそのプロトタイプにあります:
UINT_PTR SHAppBarMessage(
DWORD dwMessage,
PAPPBARDATA pData
);
私はablになりますwin32ルビバインディングを使用して戻り値の型と最初のパラメータを取得する方法ですが、2番目の方法では構造が必要です。次のように構造体の定義は次のとおり
typedef struct _AppBarData {
DWORD cbSize;
HWND hWnd;
UINT uCallbackMessage;
UINT uEdge;
RECT rc;
LPARAM lParam;
} APPBARDATA, *PAPPBARDATA;
私は両方を使用して、このAPIメソッドを定義しようとした:「通話中
api = Win32API.new('shell32','SHAppBarMessage',['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'],'I')
と
api = Win32API.new('shell32','SHAppBarMessage',['L', 'LLLLLLLL'],'I')
が、最初のセグメンテーション違反メソッド呼び出しで指定された引数の量が間違っているため、2番目の呼び出しが失敗します。 C++で外部モジュールを作成せずにこのapi関数を公開する方法はありますか?
ありがとうございました。 DWORDとAPPBARDATAへのポインタ、 は、それはこのように宣言することがshuold
:その後、呼ば
app_bar_msg = Win32API.new('shell32', 'SHAppBarMessage', ['L', 'P'], 'L')
:
msg_id = 1 app_bar_data = "properly initalized binary string" #should have sizeof(APPBARDATA) bytes app_bar_msg.call(msg_id, app_bar_data)
しかし、私は知りません