 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 27.10.2008, 17:03 Titel: Problem bei DLL Erstellung |
|
|
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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 27.10.2008, 17:55 Titel: |
|
|
In der "Function" Zeile am Ende Export anhängen, mit Export kompilieren.
Außerdem empfohlene Kompilerflags: -arch 686 -t 16384 -exx -mt |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 27.10.2008, 18:32 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.10.2008, 18:38 Titel: |
|
|
btw, ALIAS brauchst du nur anzugeben, wenn sich der dll-name tatsächlich vom declare-namen unterscheidet.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 27.10.2008, 18:41 Titel: |
|
|
ä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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 27.10.2008, 19:08 Titel: |
|
|
Export bei der Funktion nicht der Deklaration. |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 27.10.2008, 19:16 Titel: |
|
|
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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 27.10.2008, 20:08 Titel: |
|
|
Import Library -> Google. |
|
Nach oben |
|
 |
|
|
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.
|
|