Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem bei DLL Erstellung

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 27.10.2008, 17:03    Titel: Problem bei DLL Erstellung Antworten mit Zitat

Ich habe gerade versucht diese DLL zu erstellen.
Code...
Code:
#DEFINE BBBank ANY Ptr

Declare Function CreateBank lib "Banks" Alias "CreateBank" (byVal Bytes AS INTEGER) As Any Ptr
       
Declare Function FreeBank lib "Banks" Alias "FreeBank" (byVal Bank AS Any ptr) As Integer

Declare FUNCTION ResizeBank Lib "Banks" Alias "ResizeBank" (BYVAL Bank AS ANY PTR, BYVAL anzahl AS INTEGER) AS Integer

Declare FUNCTION CopyBank Lib "Banks" Alias "CopyBank" (BYVAL quelle AS ANY PTR _
  , BYVAL start1 AS INTEGER _
  , BYVAL ziel AS ANY PTR _
  , BYVAL start2 AS INTEGER _
  , BYVAL anzahl AS INTEGER) AS Integer
 
Declare FUNCTION PeekByte Lib "Banks" Alias "PeekByte" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS UByte

Declare Function PokeByte Lib "Banks" alias "PokeByte" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS UBYTE) AS Integer

declare FUNCTION ReadBytes Lib "Banks" Alias "ReadBytes" (BYVAL Bank AS ANY PTR, BYVAL stream AS INTEGER, BYVAL offset AS INTEGER, BYVAL anzahl AS INTEGER) AS Integer

declare FUNCTION PokeInt Lib "Banks" Alias "PokeInt" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS INTEGER) AS Integer

Declare FUNCTION PeekInt Lib "Banks" Alias "PeekInt" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS Integer

Declare FUNCTION SeekFile Lib "Banks" Alias "SeekFile" (BYVAL stream AS INTEGER, BYVAL Offset AS INTEGER) AS Integer

Declare FUNCTION PokeShort Lib "Banks" Alias "PokeShort" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS USHORT) AS Integer

Declare FUNCTION PeekShort Lib "Banks" Alias "PeekShort" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS UShort

Declare FUNCTION PokeFloat Lib "Banks" Alias "PokeFloat" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS SINGLE) AS Integer

Declare FUNCTION PeekFloat Lib "Banks" Alias "PeekFloat" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS Single

Declare Function OpenRWBytes Lib "Banks" Alias "OpenRWBytes" (ByVal strg As String) As Integer

function CreateBank(BYVAL Bytes AS INTEGER) AS ANY PTR
    RETURN ALLOCATE(Bytes)
END Function



FUNCTION FreeBank (BYVAL Bank AS ANY PTR) AS INTEGER
    DEALLOCATE Bank
    RETURN 0
END Function



FUNCTION ResizeBank (BYVAL Bank AS ANY PTR, BYVAL anzahl AS INTEGER) AS INTEGER
  REALLOCATE Bank, anzahl
  RETURN 0
END FUNCTION

FUNCTION CopyBank(BYVAL quelle AS ANY PTR _
  , BYVAL start1 AS INTEGER _
  , BYVAL ziel AS ANY PTR _
  , BYVAL start2 AS INTEGER _
  , BYVAL anzahl AS INTEGER) AS INTEGER
  FOR i AS INTEGER = 0 TO Anzahl - 1
    CAST(BYTE PTR,ziel)[start2+i] = CAST(BYTE PTR,quelle)[start1+i]
  NEXT
  RETURN 0
END FUNCTION

FUNCTION PeekByte (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS UBYTE
    DIM x AS UBYTE PTR
    x = CAST(UBYTE PTR, Bank)
    RETURN *(x+Offset)
END FUNCTION

FUNCTION PokeByte (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS UBYTE) AS INTEGER
    DIM x AS UBYTE PTR
    x = CAST(UBYTE PTR, Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION ReadBytes (BYVAL Bank AS ANY PTR, BYVAL stream AS INTEGER, BYVAL offset AS INTEGER, BYVAL anzahl AS INTEGER) AS INTEGER
    DIM i AS INTEGER
    DIM B AS UBYTE
    IF (anzahl < 1) OR (offset >= LOF(stream)) OR (offset < 0) THEN RETURN 0
    SEEK #stream,(offset+1)
    FOR i = 0 TO anzahl-1
        IF EOF(stream) THEN RETURN i
        GET #stream,,B
        *(CAST(UBYTE PTR,Bank)+i) = B
    NEXT i
    RETURN anzahl
END FUNCTION

FUNCTION PokeInt (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS INTEGER) AS INTEGER
    DIM x AS INTEGER PTR
    x = CAST(INTEGER PTR,Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION PeekInt (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS INTEGER
    DIM x AS INTEGER PTR
    x = CAST(INTEGER PTR, Bank)
    RETURN *(x+Offset)
END FUNCTION

FUNCTION SeekFile (BYVAL stream AS INTEGER, BYVAL Offset AS INTEGER) AS INTEGER
    SEEK #stream, Offset
    RETURN Offset
END FUNCTION

FUNCTION PokeShort (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS USHORT) AS INTEGER
    DIM x AS USHORT PTR
    x = CAST(USHORT PTR,Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION PeekShort (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS USHORT
    DIM x AS USHORT PTR
    x = CAST(USHORT PTR, Bank)
    RETURN *(x+Offset)
END FUNCTION

FUNCTION PokeFloat (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS SINGLE) AS INTEGER
    DIM x AS SINGLE PTR
    x = CAST(SINGLE PTR,Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION PeekFloat (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS SINGLE
    DIM x AS SINGLE PTR
    x = CAST(SINGLE PTR, Bank)
    RETURN *(x+Offset)
END FUNCTION

Function OpenRWBytes (ByVal strg As String) As integer
   Dim As Integer DNr = FreeFile
   Open strg For Binary As #DNr
   Return DNr
End Function


Fehlermeldung.....
Code:
Make done
C:\Program Files\FreeBASIC\fbc -dylib "Banks.bas"
C:\PROGRA~1\FREEBA~1\bin\win32\dlltool.exe: Syntax error in def file Banks.def:0



Standard Kompilat geht ohne probs, nur das hier irgendwie wohl nicht so richtig, oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 27.10.2008, 17:55    Titel: Antworten mit Zitat

In der "Function" Zeile am Ende Export anhängen, mit Export kompilieren.

Außerdem empfohlene Kompilerflags: -arch 686 -t 16384 -exx -mt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 27.10.2008, 18:32    Titel: Antworten mit Zitat

Okay beispiel...

Code:
Declare Function FreeBank lib "Banks" Alias "FreeBank" (byVal Bank AS Any ptr) As Integer EXPORT


Code:
FUNCTION FreeBank (BYVAL Bank AS ANY PTR) AS Integer export
    DEALLOCATE Bank
    RETURN 0
END Function


Fehler:

Code:
Build error(s)
C:\Program Files\FreeBASIC\fbc -dylib -export "Banks.bas"
Banks.bas(5) error 3: Expected End-of-Line, found 'EXPORT' in 'Declare Function FreeBank lib "Banks" Alias "FreeBank" (byVal Bank AS Any ptr) As Integer EXPORT'


warum meckert es bei dem export nun noch mehr?


Ich hab jetzt das hier auch noch net verstanden...

COLOR: RGB(255, 163, 79);">EXPORT also warum bei den funktionen, die ich bisher immer gesehen hab, immer so ein color steht.
mmmm mal in die hilfe schaun, aber so auf den ersten blick einleuchtend isses ja net.


Zuletzt bearbeitet von Heiko am 27.10.2008, 18:39, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.10.2008, 18:38    Titel: Antworten mit Zitat

btw, ALIAS brauchst du nur anzugeben, wenn sich der dll-name tatsächlich vom declare-namen unterscheidet. zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 27.10.2008, 18:41    Titel: Antworten mit Zitat

ähm geändert, hilft aber leider nix....zumindet nicht bei meinem problem.
okay ich poste jetzt nochmal den geänderten code.
Könnt ihn ja gern mal selber probieren.

Code:
#DEFINE BBBank ANY Ptr

Declare Function CreateBank lib "Banks"  (byVal Bytes AS INTEGER) As Any Ptr EXPORT
       
Declare Function FreeBank lib "Banks" (byVal Bank AS Any ptr) As Integer EXPORT

Declare FUNCTION ResizeBank Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL anzahl AS INTEGER) AS Integer export

Declare FUNCTION CopyBank Lib "Banks" (BYVAL quelle AS ANY PTR _
  , BYVAL start1 AS INTEGER _
  , BYVAL ziel AS ANY PTR _
  , BYVAL start2 AS INTEGER _
  , BYVAL anzahl AS INTEGER) AS Integer export
 
Declare FUNCTION PeekByte Lib "Banks"(BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS UByte export

Declare Function PokeByte Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS UBYTE) AS Integer export

declare FUNCTION ReadBytes Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL stream AS INTEGER, BYVAL offset AS INTEGER, BYVAL anzahl AS INTEGER) AS Integer export

declare FUNCTION PokeInt Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS INTEGER) AS Integer export

Declare FUNCTION PeekInt Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS Integer export

Declare FUNCTION SeekFile Lib "Banks" (BYVAL stream AS INTEGER, BYVAL Offset AS INTEGER) AS Integer export

Declare FUNCTION PokeShort Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS USHORT) AS Integer export

Declare FUNCTION PeekShort Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS UShort export

Declare FUNCTION PokeFloat Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS SINGLE) AS Integer export

Declare FUNCTION PeekFloat Lib "Banks" (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS Single export

Declare Function OpenRWBytes Lib "Banks" (ByVal strg As String) As Integer export

function CreateBank(BYVAL Bytes AS INTEGER) AS ANY Ptr export
    RETURN ALLOCATE(Bytes)
END Function



FUNCTION FreeBank (BYVAL Bank AS ANY PTR) AS Integer export
    DEALLOCATE Bank
    RETURN 0
END Function



FUNCTION ResizeBank (BYVAL Bank AS ANY PTR, BYVAL anzahl AS INTEGER) AS Integer export
  REALLOCATE Bank, anzahl
  RETURN 0
END FUNCTION

FUNCTION CopyBank(BYVAL quelle AS ANY PTR _
  , BYVAL start1 AS INTEGER _
  , BYVAL ziel AS ANY PTR _
  , BYVAL start2 AS INTEGER _
  , BYVAL anzahl AS INTEGER) AS Integer export
  FOR i AS INTEGER = 0 TO Anzahl - 1
    CAST(BYTE PTR,ziel)[start2+i] = CAST(BYTE PTR,quelle)[start1+i]
  NEXT
  RETURN 0
END FUNCTION

FUNCTION PeekByte (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS UByte export
    DIM x AS UBYTE PTR
    x = CAST(UBYTE PTR, Bank)
    RETURN *(x+Offset)
END FUNCTION

FUNCTION PokeByte (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS UBYTE) AS Integer exprt
    DIM x AS UBYTE PTR
    x = CAST(UBYTE PTR, Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION ReadBytes (BYVAL Bank AS ANY PTR, BYVAL stream AS INTEGER, BYVAL offset AS INTEGER, BYVAL anzahl AS INTEGER) AS Integer export
    DIM i AS INTEGER
    DIM B AS UBYTE
    IF (anzahl < 1) OR (offset >= LOF(stream)) OR (offset < 0) THEN RETURN 0
    SEEK #stream,(offset+1)
    FOR i = 0 TO anzahl-1
        IF EOF(stream) THEN RETURN i
        GET #stream,,B
        *(CAST(UBYTE PTR,Bank)+i) = B
    NEXT i
    RETURN anzahl
END FUNCTION

FUNCTION PokeInt (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS INTEGER) AS Integer export
    DIM x AS INTEGER PTR
    x = CAST(INTEGER PTR,Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION PeekInt (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS Integer export
    DIM x AS INTEGER PTR
    x = CAST(INTEGER PTR, Bank)
    RETURN *(x+Offset)
END FUNCTION

FUNCTION SeekFile (BYVAL stream AS INTEGER, BYVAL Offset AS INTEGER) AS Integer export
    SEEK #stream, Offset
    RETURN Offset
END FUNCTION

FUNCTION PokeShort (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS USHORT) AS Integer export
    DIM x AS USHORT PTR
    x = CAST(USHORT PTR,Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION PeekShort (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS USHORT export
    x = CAST(USHORT PTR, Bank)
    RETURN *(x+Offset)
END FUNCTION

FUNCTION PokeFloat (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER, BYVAL Wert AS SINGLE) AS Integer export
    DIM x AS SINGLE PTR
    x = CAST(SINGLE PTR,Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION PeekFloat (BYVAL Bank AS ANY PTR, BYVAL Offset AS INTEGER) AS Single export
    DIM x AS SINGLE PTR
    x = CAST(SINGLE PTR, Bank)
    RETURN *(x+Offset)
END FUNCTION

Function OpenRWBytes (ByVal strg As String) As Integer export
   Dim As Integer DNr = FreeFile
   Open strg For Binary As #DNr
   Return DNr
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 27.10.2008, 19:08    Titel: Antworten mit Zitat

Export bei der Funktion nicht der Deklaration.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 27.10.2008, 19:16    Titel: Antworten mit Zitat

cool, danke, war nicht gleich ersichtlich.
achja, die .a datei, die auch noch erstellt wird, wozu wird die noch benötigt?
reicht die dll nicht aus?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 27.10.2008, 20:08    Titel: Antworten mit Zitat

Import Library -> Google.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz