Interfejs api Ruby Win32
Muszę uzyskać dostęp do kilku funkcji biblioteki win32 w ruby. Znalazłem bardzo rzadkie informacje na temat klasy Win32API online, więc pytam tutaj.
Wiem, że możesz zrobić coś takiego:
function = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')
Ale wydaje mi się, że nie mogę wywołać tej funkcji z bieżącymi powiązaniami win32:
http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx
Problem tkwi w jego prototypie:
UINT_PTR SHAppBarMessage(
DWORD dwMessage,
PAPPBARDATA pData
);
Będę mógł używać powiązań ruby win32 do pobrania typu zwracanego i pierwszego parametru, jednak drugi oczekuje struktury. Definicja struktury jest następująca:
typedef struct _AppBarData {
DWORD cbSize;
HWND hWnd;
UINT uCallbackMessage;
UINT uEdge;
RECT rc;
LPARAM lParam;
} APPBARDATA, *PAPPBARDATA;
Próbowałem zdefiniować tę metodę api przy użyciu obu:
api = Win32API.new('shell32','SHAppBarMessage',['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'],'I')
i
api = Win32API.new('shell32','SHAppBarMessage',['L', 'LLLLLLLL'],'I')
ale pierwsza z nich ulega awarii podczas metody „call”, a druga nie działa z powodu niewłaściwej liczby argumentów określonych w wywołaniu metody „call”. Czy istnieje sposób na ujawnienie tej funkcji api bez uciekania się do tworzenia zewnętrznego modułu w C ++?
Dzięki.