我需要在ruby中访问win32库的一些函数.我在网上找到了关于Win32API类的非常稀少的信息,所以我在这里问.
我知道你可以这样做:
function = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')
Run Code Online (Sandbox Code Playgroud)
但我似乎无法使用当前的win32绑定调用此函数:
http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx
问题在于它的原型:
UINT_PTR SHAppBarMessage(
DWORD dwMessage,
PAPPBARDATA pData
);
Run Code Online (Sandbox Code Playgroud)
我将能够使用win32 ruby绑定来获取返回类型和第一个参数,但是,第二个参数需要一个结构.结构的定义如下:
typedef struct _AppBarData {
DWORD cbSize;
HWND hWnd;
UINT uCallbackMessage;
UINT uEdge;
RECT rc;
LPARAM lParam;
} APPBARDATA, *PAPPBARDATA;
Run Code Online (Sandbox Code Playgroud)
我尝试使用两者来定义这个api方法:
api = Win32API.new('shell32','SHAppBarMessage',['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'],'I')
Run Code Online (Sandbox Code Playgroud)
和
api = Win32API.new('shell32','SHAppBarMessage',['L', 'LLLLLLLL'],'I')
Run Code Online (Sandbox Code Playgroud)
但是第一个在"调用"方法期间发生了段错误,而第二个由于"调用"方法调用中指定的参数数量错误而无法运行.有没有办法公开这个api函数而不需要在C++中创建外部模块?
谢谢.