 |
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 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 23.10.2008, 15:12 Titel: |
|
|
Es ging (so habe ich das gelesen) um die Umsetzung eines BB-Quellcodes nach FB mit möglichst geringem Aufwand.
Dazu gibt es neben der bewährten Methode, per Hand Befehl für Befehl umzusetzen, die Möglichkeit einige BB-Befehle als Prozeduren zu definieren (Sebastians Vorschlag) oder teilweise als "Define xx" vom Präprozessor ersetzen zu lassen.
Daraus dann eine DLL zu machen halte ich nicht für sinnvoll.
Erst schreibt man noch den Qt für die DLL dazu noch eine .bi und alle nicht von der DLL abgedeckten Umsetzungen muss man doch von Hand erledigen.
Für wen soll die DLL denn nützlich sein, in BB gibt es die Prozeduren sowieso und in FB kann man sie auch anders umsetzen.
DLLs sind auch kein Allheilmittel, im Gegenteil, höherer Speicherplatzbedarf und jeder Funktionsaufruf braucht seine zusätzliche Aufrufzeit.
In diese Idee würde ich keine Zeit investieren. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 23.10.2008, 15:37 Titel: |
|
|
MIR nützt diese DLL etwas.
Weil ich nicht nur in FreeBasic code sondern auch in einer anderen Sprache, und daher wäre es das sinnvollste für mich solch eine DLL bei Programmen nutzen zu können, die dessen Funktionalität benötigen.
Man (ich) kann ja in diese DLL noch andere sinnvolle Sachen unterbringen. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 23.10.2008, 16:06 Titel: |
|
|
Heiko hat Folgendes geschrieben: |
und ist es möglich, dass man alle paramter hinter den befehlen in klammern angeben muss.
das verwirrt sonst ein wenig.
ausserdem müssten das in meinem fall eventuell später eh alles funktionen sein, da ich nebenbei auch noch eine dll draus machen möchte. |
Mir scheint, Du veranstaltest den Aufwand nur, um Dich nicht an die FreeBasic-Conventionen gewöhnen zu müssen. Wenn Du aber mit FreeBasic arbeitest, solltest Du Dich von Beginn an umgewöhnen.  _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 23.10.2008, 16:20 Titel: |
|
|
Nein, darum geht es nicht, möchte nur gern ein großes Projekt fertig bekommen.
Wird ein Knaller, versprochen.
Ich schlage mich gerade mit mehren Sprachen rum, verzeih, wenn ich da eine einfache Möglichkeit suche.
Und hey, aus diesen Funktionen lerne ich ja dennoch, oder meinst Du nicht?
Die Syntax und Konventionen von FB lerne ich so oder so, da ich vorhabe auch weiter mit FB zu coden (unter anderem) nur im Moment, wäre es da grad einfacher dieses zu haben.
Ich hoffe Du verstehst was ich meine.
[edit] und zu den Konventionen.....mal mit mal ohne Klammer.....!?! bei der Benutzung der Funktionen als Befehl sieht man ja nicht sofort obs eine Sub oder eine Funktion ist.Daher wäre eine gleiche Syntax wünschenswert.
War nur eine Idee, ich denke auch keine soooo schlechte, da ich gern in meinen Sachen doch einiges wenigstens einheitlich möchte.
Sauberer Quellcode heißt meine Devise. |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 25.10.2008, 01:14 Titel: |
|
|
sorry double.wichtig.
hier mal paar ergänzungen zu sebastians code.
sinnvoll wäre nich ResizeBank und CopyBank.
Aber dazu fehlt mir wohl im Moment noch das KnowHow.
Achja, das BBBank, ist das notwendig?
Weil ja an diese Funktion eh irgendein Handle übergeben wird(variable etc.) und ich mich wunderte, könnte ja auch stur AS Integer sein, oder.
So gibt man dann doch auch einen Namen weiter, oder?
Cool wäre wenn es einen Standarddatentyp gäbe wenn man nix definiert, wie eben AS Any Ptr zum beispiel, oder?
Achja, schaut mal, ob der code so korrekt ist.
Und ob ein spezielles open und closefile sinnvoll wäre.
Im zusammenhang mit den banken.
Wäre so sicher einfacher, wenn man doch eine dll draus machen möchte, weil da ja auch abhängigkeiten bestehen, oder liege ich da falsch?
andere programmiersprache=andere art datei zu öffnen.
Da in FB auch noch der typ des öffnens der datei bestimmt werden muss.
Code: | #define BBBank Any Ptr
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 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
|
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 25.10.2008, 15:02 Titel: |
|
|
Code: | 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
Return Cast(UByte Ptr, Bank)[Offset]
End Function
Function PokeByte (ByVal Bank As Any Ptr, ByVal Offset As Integer, ByVal Wert As UByte) As Integer
Cast(UByte Ptr, Bank)[Offset] = Wert
Return 0
End Function
Function PeekShort (ByVal Bank As Any Ptr, ByVal Offset As Integer) As UShort
Return Cast(UShort Ptr, Bank)[Offset]
End Function
Function PokeShort (ByVal Bank As Any Ptr, ByVal Offset As Integer, ByVal Wert As UShort) As Integer
Cast(UShort Ptr, Bank)[Offset] = Wert
Return 0
End Function
... und so weiter....
|
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 26.10.2008, 23:34 Titel: |
|
|
Alles klar, suuuper, danke dir.
aber eine frage hab ich dennoch und zwar hierzu...
Code: | 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 |
es werden ja aus einer datei Bytes gelesen, wie würde dann die open anweisung lauten müssen, gibt ja da einige parameter, oder in BINARY das allheilmittel?
Ich bin jetzt mal von BINARY ausgegangen, da könnte eine OPEN Funktion explizit für ReadBytes ja so aussehen, oder?
Code: | Function OpenRWBytes (ByVal strg As String) As integer
Dim As Integer DNr = FreeFile
Open strg For Binary As #DNr
Return DNr
End Function |
|
|
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.
|
|