Hilfe für dll umsetzen.

Für allgemeine Fragen zur Programmierung mit PureBasic.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Hilfe für dll umsetzen.

Beitrag von super_castle »

Hallo, wer kann mir mal helfen diese 3 dll von freebasic umzusetzen in Purebasic-Syntax?
Die Muster möchte ich dann nehmen für eigene dll.

Danke.

gruss

Code: Alles auswählen

DECLARE FUNCTION myLibChange LIB "ptr_dll" ALIAS "myLibChange" (ByVal c AS UByte PTR) AS integer

Function myLibChange (ByVal c AS UByte PTR) AS Integer Export
   c[0]=234
   myLibChange=c[0]
END FUNCTION 


DECLARE FUNCTION bitmapzeiger LIB "bitmap_dll" ALIAS "bitmapzeiger" (ByVal c AS Integer PTR) AS integer

Function bitmapzeiger (ByVal c AS Integer PTR) AS Integer Export
	Dim z As Integer
	
	For z=0 To 128*128
   	*c=&h00ff00
    	c=c+1
	Next 
End FUNCTION 

DECLARE FUNCTION myLibAdd LIB "test_asm_dll" ALIAS "myLibAdd" (BYREF a AS INTEGER, _
     ByRef b AS INTEGER) AS INTEGER
DECLARE FUNCTION myLibChange LIB "test_asm_dll" ALIAS "myLibChange" (ByVal c AS INTEGER PTR) AS INTEGER

FUNCTION myLibAdd (BYREF a AS INTEGER, BYREF b AS INTEGER) AS INTEGER EXPORT
   ASM
      mov esi, [a]
      mov eax, [esi]
      
      mov esi, [b]
      mov ebx, [esi]
      
      ADD eax, ebx
      
      mov [FUNCTION], eax
   END ASM
END Function

FUNCTION myLibChange (ByVal c AS INTEGER PTR) AS INTEGER EXPORT
   ASM
      mov esi, [c]
      mov eax, [esi]
      ADD eax, 11
      mov [esi], eax
      
      mov [FUNCTION], eax
   END ASM
END FUNCTION 
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Hilfe für dll umsetzen.

Beitrag von edel »

Versuch es mal damit :

Code: Alles auswählen

ProcedureDLL myLibChange(*c.byte)
  *c\b = 234
  ProcedureReturn *c\b
EndProcedure

ProcedureDLL bitmapzeiger (*c.long)
  Protected z.i
  
  For z=0 To 128*128
    *c\l = $00ff00
    *c = *c + 1
  Next 
  
EndProcedure

ProcedureDLL myLibAdd (a, b)  
  ProcedureReturn a + b    
EndProcedure

ProcedureDLL myLibChange(*c)    
  *c\i + $11
  ProcedureReturn *c\i    
EndProcedure
Zuletzt geändert von edel am 21.06.2010 04:44, insgesamt 2-mal geändert.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Re: Hilfe für dll umsetzen.

Beitrag von super_castle »

Jup, danke.

Gruss
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: Hilfe für dll umsetzen.

Beitrag von Blackskyliner »

Nur mal so, als ASM Interessant...

Warum läd der Code oben eigentlich erst die variablen in den "esi" und dann erst ins "eax", bzw. "ebx" und nicht direkt in die entsprechenden Register eax und ebx, sondern erst so umständlich?
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Re: Hilfe für dll umsetzen.

Beitrag von super_castle »

Ist eine Test-Dll mit Asm-code.
Das umständliche daran ist für mich erstmal Sekundär.
Wichtig war das sie so mit Rapidq läuft.

Das negative:
Die untere Purebasic-Dll läuft leider nicht so mit Rapidq.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Hilfe für dll umsetzen.

Beitrag von Thorium »

Blackskyliner hat geschrieben:Nur mal so, als ASM Interessant...

Warum läd der Code oben eigentlich erst die variablen in den "esi" und dann erst ins "eax", bzw. "ebx" und nicht direkt in die entsprechenden Register eax und ebx, sondern erst so umständlich?
Er läd sie nicht erst ins esi und dann ins eax. Es handelt sich hier um einen Pointer, es wird erst die adresse des pointers ins esi geladen um dann die Variable, welche sich an der durch esi adressierten adresse befinded in eax laden zu können.
Geht glaub ich aber auch etwas einfacher mit LEA, aber damit hab ich noch nie was gemacht. ^^
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Hilfe für dll umsetzen.

Beitrag von edel »

super_castle hat geschrieben:Ist eine Test-Dll mit Asm-code.
Das umständliche daran ist für mich erstmal Sekundär.
Wichtig war das sie so mit Rapidq läuft.

Das negative:
Die untere Purebasic-Dll läuft leider nicht so mit Rapidq.
Es kann natuerlich sein das ich da oben nen Fehler eingebaut habe. Aber um dir zu helfen
muesste man wissen wieso die DLL nicht laeuft (jaja, Beine wird sie nicht haben ;)).
Gibt es eine Fehlermeldung, schmiert das Programm ab, ...?

Was das ASM Zeug betrifft, so bin ich mir fast schon sicher das PB aehnlich "optimiert" :lol:
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Hilfe für dll umsetzen.

Beitrag von Thorium »

Also die Addition ist auf jeden Fall falsch, da es wie gesagt Pointer sind. Aber wozu man so ne Addition als funktion braucht ist mir ein Rätsel.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Hilfe für dll umsetzen.

Beitrag von edel »

Stimmt, ich habe das byRef gekonnt ueberlesen.

Code: Alles auswählen

ProcedureDLL myLibAdd (*a.long, *a.long) 
  ProcedureReturn *a\l + *b\l
EndProcedure
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Re: Hilfe für dll umsetzen.

Beitrag von super_castle »

Aber wozu man so ne Addition als funktion braucht ist mir ein Rätsel.
Au man,wo bin ich hier.... :D

Kann man nicht erstmal mit einfachen Dingen eine Dll testen..., man diese Sprüche immer....oh.... :bounce:

Das ist der deutsche Arbeiterabgrund....
Antworten