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:

DLL und Strings
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 07.10.2005, 16:58    Titel: Antworten mit Zitat

Hallo vspickelen,

das hat für Excel auch schon ein Wolf W. Radzinski gemacht:
www.rendar.de (dort die Nr. cool

http://www.rendar.de/excel/langezahlen/basis_umwandlungen.xla

Vielleicht kannst Du mir noch weiterhelfen in der String -> DLL - Sache:

Ich hätte gern zu dem "gepointeten String" als Argumente auch noch Zahlen übergeben und einen weiteren String. Als Rückgabe brauche ich nur den "gepointeten String". Hast Du da auch noch ne Lösung? (Für Hauptprogramm und .DLL) lächeln

Übrigens: Deine Lösung arbeitet ja mit Sub, wo ich eigentlich eine Function haben wollte. Ich habe aber in der Doku zu FB unter dem Keyword "Export" ein Beispiel für eine Function gefunden, die in VBA (also dem Hauptprogramm zum Aufruf der Funktion der .DLL) nicht unterstützt wird:

DIM <FktName> AS FUNCTION (...) AS <Datentyp> <- Funktionspointer

Deine Sub umgeht dies und funktioniert! lächeln lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
vspickelen



Anmeldungsdatum: 12.06.2005
Beiträge: 13
Wohnort: Holland

BeitragVerfasst am: 10.10.2005, 22:53    Titel: Antworten mit Zitat

ooops hat Folgendes geschrieben:
Ich hätte gern zu dem "gepointeten String" als Argumente auch noch Zahlen übergeben und einen weiteren String. Als Rückgabe brauche ich nur den "gepointeten String".

Etwa wie
Code:
Declare Sub Lower Lib "Strdll" Alias "Lower@16" (ByRef s As _
String, ByRef z As String, ByVal a As Long, ByVal b As Long)

Function LowCase()
   g$ = "ARGeWEPLOF"
   h$ = "hrumph"
   k = 1: l = 2
   Lower g$, h$, k, l
   LowCase = g$
End Function


Übrigens soll man ab FB 0.13 in einem DLL eigentlich ByVal strings nützen, sehe

http://www.freebasic.net/forum/viewtopic.php?t=1436
Zitat:
v1ctor
To receive strings from, or pass strings to libraries compiled by different compilers, always declare the args as "Byval mystring as string", the pointer to the string data will be passed, not to the descriptor.

Grüße,
vspickelen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 06.11.2005, 14:15    Titel: @Zahl - Bug in freeBasic-DLLs Antworten mit Zitat

Hallo!

Ich habe mal versucht, die mydll.dll in RapidQ zu laden. Es funktioniert nur, wenn ich die Funktion als AddNumbers@8 anspreche. Das Verhalten ist also identisch zu IBasic.

Dann habe ich mit 'nem Hexeditor in mydll.dll "@8" durch je ein "CHR$(0)" ersetzt. Jetzt kann ich die Funktion als "AddNumbers" aktivieren. Mit freeBasic bleibt der Aufruf unverändert; testload.bas funktioniert weiterhin.

FreeBasic-Version ist FB_Win32_20051026 .

Gruß Steini
_________________
Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeterHarder



Anmeldungsdatum: 27.03.2005
Beiträge: 45
Wohnort: Deutschland

BeitragVerfasst am: 11.01.2006, 00:48    Titel: Re: DLL und Strings Antworten mit Zitat

Hallo "H.Brill",

ich hab jetzt die ultimative Lösung für die Rückgabe von Strings als Funktionswert (also nicht über die Parameterliste) gefunden: Es geht über ZString!

Anfangs hattest du hier folgendes (nicht funktionierende) Beispeil gebracht:

Code:

  Function Lower (byref a as String ) as String export
     Dim t as String
     t = LCase$(a)
     Lower = t
  End Function
 


Dieses Beispiel muss wie folgt verändert werden:

Code:

  Function Lower (byref a as String ) as ZString Ptr Export
     Dim t as ZString * Len(a)+1
     t = LCase$(a)
     Lower = @t
  End Function
 


Neben der Dimensionierung als "ZString" und Festlegung der Länge ist es also wichtig, in den Kopf statt "String" jetzt "ZString Ptr" zu schreiben (nur "ZString" ohne "Ptr" geht nicht). Damit dann auch der Pointer zurückgegeben wird, ist es weiterhin wichtig, bei der Rückgabe ein "@"-Zeichen vor die Variable zu setzen.

Im Hauptprogramm kannst du trotzdem den Rückgabewert als "As String" geklarieren; dass merkt den Beschiss nicht, da das Hauptprogramm sowieso nur einen Pointer auf einen Nullbyte-Rerminieren String erwartet. Der Compiler wird es dann erledigen, dass dieser Nullbyte-Terminierte String in das entsprechende Basicvariablen-Format überführt wird (jedenfallst ist das bei meinem GFA-Basic-Compiler so).

Die Rückgabe funktioniert nicht, wenn man den Pointer auf einen "normalen String" zurückgibt, und zwar auch dann nicht, wenn man diese Pointerrückgabe im Kopf der Funktion als "Long" deklariert - warum das nicht geht, weiß ich allerdings auch nicht.

Liebe Grüße

Peter
_________________
Deutsche Mailingliste für freeBASIC: de.groups.yahoo.com/group/free-basic.
Zum Anmelden einfach eine leere E-Mail an free-basic-subscribe@yahoogroups.de senden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.01.2006, 19:18    Titel: Antworten mit Zitat

Code:
Dim t as ZString * Len(a)+1

Du kannst doch nicht mit einer Varibel eine Variabel deklarien.
Freebasic lieferft (Meiner Meinung nach korrekt) eine Fehlermeldung.

Auch
Zitat:
Im Hauptprogramm kannst du trotzdem den Rückgabewert als "As String" geklarieren; dass merkt den Beschiss nicht,

Stimmt bei Freebasic nicht, das "schmeckt" den Beschiss ...
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
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