WinApi "undefined reference to `keybd_event@10'"
Übersicht

![]() |
das wurgelBetreff: WinApi "undefined reference to `keybd_event@10'" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich will einen Tastendruck simulieren, nutze dafür die WinApi-Befehle. Bei mouse_event funktioniert alles, bei keybd_event sagt er mir "undefined reference to `keybd_event@10'".
Ich verstehe nicht warum. Kennt sich jemand besser aus? Code: [AUSKLAPPEN] Const VK_LEFT@=$25 'LEFT ARROW key
Const VK_UP@=$26 'UP ARROW key Const VK_RIGHT@=$27 'RIGHT ARROW key Const VK_DOWN@=$28 'DOWN ARROW key Extern "Win32" Function WINAPI_mouse_event(dwFlags:Int,dx:Int,dy:Int,dwData:Int)="mouse_event@20" Function WINAPI_keybd_event(bVk:Byte, bScan:Byte, dwFlags:Int)="keybd_event@10" End Extern WINAPI_keybd_event(VK_UP, 0, 0) WINAPI_keybd_event(VK_UP, 0, 2) |
||
1 ist ungefähr 3 |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könnte wohl damit zusammenhängen, dass die Länge der Parameter bei keybd_event 16 anstatt 10 Byte beträgt. Versuche es demnach einmal so in BlitzMax: [AUSKLAPPEN] Function WINAPI_keybd_event(bVk:Byte, bScan:Byte, dwFlags:Int)="keybd_event@16" Viel Spaß. |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank, das funktioniert. ![]() Aber ich versteh nicht wieso das 16 Bytes sind. Zwei Bytes, ein Int und ein ULONG_PTR (was auch immer das ist) müssten doch zusammen 10 Bytes ergeben. Es sein denn ein ULONG_PTR braucht 10 Bytes. Und nochwas: Hab herausgefunden, dass es nicht gut ist, Parameter hinten wegzulassen, auch wenn man die Anzahl der Bytes angibt, denn sonst verändern sich Werte im Speicher des Programms, die damit überhaupt nichts zu tun haben. Am richtigsten ist also das hier: Code: [AUSKLAPPEN] Function WINAPI_keybd_event(bVk:Byte, bScan:Byte, dwFlags:Int, dwExtraInfo:Int)="keybd_event@16"
|
||
1 ist ungefähr 3 |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetz sagt er bei dem hier "undefined reference to blablabla"
BlitzMax: [AUSKLAPPEN] Extern "Win32" Weis wieder nicht woran es liegt. Weis jemand, was man da alles beachten muss? |
||
1 ist ungefähr 3 |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Benutzt du WinXP? Wenn ja, dann wird das nicht gehen, da es den Befehl erst seit Vista gibt. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nope. Ich benutze Win 7. | ||
1 ist ungefähr 3 |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Extern in BlitzMax bezieht sich nicht auf das, was das OS, unter dem kompiliert wird, zur Verfügung stellt. Du könntest nun manuell die aktuelle Advapi32.lib und alles was dazu gehört dort hin kopieren, wo es hin müsste (wahrscheinlich ohne, dass es anschließend funktionieren würde), oder es über folgende Methode, welche zugleich auch das Fehlen unter einer älteren Windows-Version abfangen könnte, versuchen:
BlitzMax: [AUSKLAPPEN] SuperStrict Ich weiß nicht, ob das für deine Zwecke bereits genügen würde, aber einen Versuch wäre es sicherlich wert. |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
In Anbetracht der Tatsache, dass es sich um "Advapi32.dll" handelt, muss die Library manuel nachgeladen werden, darauf hatte ich nicht geachtet.
Um Die Funktion wie gewohnt mittels Extern einzubinden, musst du am Anfang deines Skriptes folgende Zeile schreiben: BlitzMax: [AUSKLAPPEN] Import "-ladvapi32" Erklärung: Das "-l" sagt BlitzMax, dass es in das "lib" Verzeichnis im BlitzMax Ordner suchen soll, nach der danach genannten Lib, in diesem Fall "advapi32". Solltest du später einmal erneut auf ein ähnliches Problem stoßen, kannst du es wahrscheinlich ebenfalls über das nachladen der Library lösen, dazu einfach gucken, ob sich die entsprechende Datei im Lib Ordner befindet. Die Datei trägt den Namen "libadvapi.a", für andere Libraries musst du einfach das "advapi" mit dem neuen DLL-Namen ersetzten und schon sollte es klappen sofern sich die Datei im Lib-Verzeichnis befindet. Sollte eine Lib mal nicht in diesem Ordner sein, kannst du sie entweder im Lib-Verzeichnis von MinGW suchen, oder im Windows 7 SDK finden. MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Lobby
Cool, diese Art und weise war mir bisher gänzlich unbekannt. @Der Eisvogel Jetzt versteh ich das endlich. Hatte es vorher nur mit "-advapi32" versucht. Danke an alle ![]() |
||
1 ist ungefähr 3 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group