Ruby Win32 API-Schnittstelle

Ich muss auf einige Funktionen der win32-Bibliothek in Ruby zugreifen. Ich habe extrem spärliche Informationen über die Win32API-Klasse online gefunden, daher frage ich hier.

Ich weiß, dass Sie so etwas tun können:

function = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')

Aber ich kann diese Funktion mit den aktuellen win32-Bindungen scheinbar nicht aufrufen:

http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx

Das Problem liegt in seinem Prototyp:

UINT_PTR SHAppBarMessage(      
    DWORD dwMessage,
    PAPPBARDATA pData
);

Ich werde in der Lage sein, die win32-Ruby-Bindungen zu verwenden, um den Rückgabetyp und den ersten Parameter zu erfassen, der zweite erwartet jedoch eine Struktur. Die Definition der Struktur lautet wie folgt:

typedef struct _AppBarData {
    DWORD cbSize;
    HWND hWnd;
    UINT uCallbackMessage;
    UINT uEdge;
    RECT rc;
    LPARAM lParam;
} APPBARDATA, *PAPPBARDATA;

Ich habe versucht, diese API-Methode mit beiden zu definieren:

api = Win32API.new('shell32','SHAppBarMessage',['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'],'I') 

und

api = Win32API.new('shell32','SHAppBarMessage',['L', 'LLLLLLLL'],'I')

Der erste Fehler tritt jedoch während der "call" -Methode auf, und der zweite Fehler tritt aufgrund der falschen Anzahl von Argumenten auf, die beim Aufruf der "call" -Methode angegeben wurden. Gibt es eine Möglichkeit, diese API-Funktion verfügbar zu machen, ohne ein externes Modul in C ++ zu erstellen?

Vielen Dank.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage