J'ai besoin d'accéder à quelques fonctions de la bibliothèque win32 dans ruby. J'ai trouvé des informations extrêmement clairsemées sur la classe Win32API en ligne, donc je demande ici.Ruby win32 api interface
Je sais que vous pouvez faire quelque chose comme ceci:
function = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')
Mais je ne peux pas sembler être en mesure d'appeler cette fonction avec les liaisons win32 actuelles:
http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx
Le problème est dans son prototype:
UINT_PTR SHAppBarMessage(
DWORD dwMessage,
PAPPBARDATA pData
);
Je serai abl e pour utiliser les bindings ruby win32 pour saisir le type de retour et le premier paramètre, cependant, le second attend une structure. La définition de la structure est la suivante:
typedef struct _AppBarData {
DWORD cbSize;
HWND hWnd;
UINT uCallbackMessage;
UINT uEdge;
RECT rc;
LPARAM lParam;
} APPBARDATA, *PAPPBARDATA;
J'ai essayé de définir cette méthode api utilisant à la fois:
api = Win32API.new('shell32','SHAppBarMessage',['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'],'I')
et
api = Win32API.new('shell32','SHAppBarMessage',['L', 'LLLLLLLL'],'I')
mais le premier segfaults au cours de la « appel "méthode et la seconde ne parvient pas à s'exécuter en raison de la mauvaise quantité d'arguments spécifiés dans l'appel de la méthode" appel ". Est-il possible d'exposer cette fonction api sans avoir recours à la création d'un module externe en C++?
Merci.