Ich habe mal ne Frage zum Inlineassembler in PureBasic. Kann mir hierzu jemand helfen oder kennt jemand einen guten Link wo man dazu was findet!
1. Wie ruft man denn aus Assembler eine dll auf?
2. Wie kann man dann die Funktionen der dll in einer Assemblerroutine
verwenden?
Danke schonmal
Assembleraufruf
Das ist ganz einfach
. Ich geb dir hier ein kleinen Beispiel Code:
Zuerst öffne ich die Lib. Das kann man auch mit API Funktionen machen. Danach ermittle ich die Adresse der Funktion [c]PlaySoundA[/c].Die Daten werden dann rückwärtz auf den Stack gepusht und mit CALL Rufe ich die Funktion auf. in Eax liegt dann der Rückgabewert der Funktion. Diese wird dann mit dem lezten MOV Befehl in lngResult gespeichert.

Code: Alles auswählen
Global strDateiName.s
Global lngFunkPtr.l
Global lngLibPtr.l
Global lngResult.l
strDateiName = "C:\Join.wav"
lngLibPtr = OpenLibrary(#PB_Any, "winmm.dll")
lngFunkPtr = IsFunction(lngLibPtr, "PlaySoundA")
!PUSH dword 0
!PUSH dword 0
!PUSH dword [v_strDateiName]
!CALL [v_lngFunkPtr]
!MOV dword [v_lngResult],Eax
Debug lngResult
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Ja schon, aber ich denke er will genauso die DLL mit dem Assembler laden. Also will er in inlineasm eine "section '.idata' import data readable writeable" machen in der er die DLL's lädt.LittleFurz hat geschrieben:Das ist ganz einfach. Ich geb dir hier ein kleinen Beispiel Code:
Zuerst öffne ich die Lib. Das kann man auch mit API Funktionen machen. Danach ermittle ich die Adresse der Funktion [c]PlaySoundA[/c].Die Daten werden dann rückwärtz auf den Stack gepusht und mit CALL Rufe ich die Funktion auf. in Eax liegt dann der Rückgabewert der Funktion. Diese wird dann mit dem lezten MOV Befehl in lngResult gespeichert.Code: Alles auswählen
Global strDateiName.s Global lngFunkPtr.l Global lngLibPtr.l Global lngResult.l strDateiName = "C:\Join.wav" lngLibPtr = OpenLibrary(#PB_Any, "winmm.dll") lngFunkPtr = IsFunction(lngLibPtr, "PlaySoundA") !PUSH dword 0 !PUSH dword 0 !PUSH dword [v_strDateiName] !CALL [v_lngFunkPtr] !MOV dword [v_lngResult],Eax Debug lngResult
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.