Ho bisogno di accedere ad alcune funzioni della libreria win32 in ruby. Ho trovato informazioni estremamente sparse sulla classe Win32API online, quindi sto chiedendo qui.Ruby interfaccia win32 api
So che si può fare qualcosa di simile:
function = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')
Ma io non riesco a essere in grado di richiamare questa funzione con le associazioni win32 attuali:
http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx
Il problema è nel suo prototipo:
UINT_PTR SHAppBarMessage(
DWORD dwMessage,
PAPPBARDATA pData
);
sarò abl e usare i vincoli ruby win32 per afferrare il tipo di ritorno e il primo parametro, tuttavia, il secondo si aspetta una struttura. La definizione della struttura è la seguente:
typedef struct _AppBarData {
DWORD cbSize;
HWND hWnd;
UINT uCallbackMessage;
UINT uEdge;
RECT rc;
LPARAM lParam;
} APPBARDATA, *PAPPBARDATA;
Ho provato a definire questo metodo api utilizzando entrambi:
api = Win32API.new('shell32','SHAppBarMessage',['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'],'I')
e
api = Win32API.new('shell32','SHAppBarMessage',['L', 'LLLLLLLL'],'I')
ma il primo segfaults durante la "chiamata "metodo e il secondo non riesce a funzionare a causa della quantità errata di argomenti specificata nel richiamo del metodo" call ". C'è un modo per esporre questa funzione API senza ricorrere alla creazione di un modulo esterno in C++?
Grazie.