 |
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 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 18.06.2005, 15:02 Titel: Array von VisualBasic aus an FB-DLL übergeben |
|
|
Hallo,
da VB so lahm ist, kam mir die Idee, ein paar Funktionen eines VisualBasic Programms wie Sortiersubs usw. in eine FB-DLL auszulagern. Problem dabei: Wie kann ich ein beliebig großes Array an eine Sub in einer DLL weitergeben, sodass diese es auch ändern sprich sortieren kann?
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
PeterHarder

Anmeldungsdatum: 27.03.2005 Beiträge: 45 Wohnort: Deutschland
|
Verfasst am: 19.06.2005, 00:47 Titel: |
|
|
Hallo Sebastian,
es hat schon mal jemand in PowerBasic so eine Hilfs-DLL für VB geschrieben, die Arrays schnell sortiert und all sowas. So viel ich weiß ist aber der Quellcode dafür nie veröffentlicht worden. Ich hab' die Hilfe zu dieser DLL, aus der kopiere ich mal die Sortier-Funktionsaufrufe hier rein. Dann weißt du schon mal, wie VB diese DLL's aufruft, anhand dessen kann man dann weiterarbeiten. Im Prinzip braucht FB nur also Pointer die Anfangsadresse des Arrays, die Endadresse (bzw. Anzahl der Elemente) und den Typ (also Short, Integer, Double oder was). Den Rest muss FB dann daraus ableiten und die Sortierung an genau den Adressen vornehmen, bzw. wenn es fertig ist dort ablegen.
Schönen Sonntag noch!
Liebe Grüße
Peter
=========================
VBEx32.DLL - ARRAY-FUNKTIONEN
VBSORTARRAY-Funktion
Genau: Sortiert ein eindimensionales Array. Die Parameter deuten darauf hin, dass Sie sowohl aufsteigend als auch absteigend sortieren können und aber auch, wo die Sortierung beginnt und endet! Sprich: Sie können ein Array teilweise sortieren lassen. Dass das Ganze in einem atemberaubenden Tempo geschieht, müssten Sie mittlerweile mitbekommen haben ), weil sonst würden wir so eine Funktion nicht einführen. Die Routine ist sehr erheblich schneller als Quicksort - oder jede andere Sortierroutine, die Sie von VB her kennen, da VBEx32.DLL Zeigeroperationen anwendet.
Code: | ' String
Public Declare Sub VBEX_SortStringAr Lib "vbex32.dll" _
Alias "VBSORTARRAYSTR" ( _
sArr() As String, _
ByVal nVon As Long, _
ByVal nBis As Long, _
ByVal nDirection As Byte)
' Integer
Public Declare Sub VBEX_SortIntegerAr Lib "vbex32.dll"_
Alias "VBSORTARRAYI" ( _
ssArr() As Integer, _
ByVal nVon As Long, _
ByVal nBis As Long, _
ByVal nDirection As Byte)
' Long
Public Declare Sub VBEX_SortLongAr Lib "vbex32.dll" _
Alias "VBSORTARRAYL" ( _
sArr() As Long, _
ByVal nVon As Long, _
ByVal nBis As Long, _
ByVal nDirection As Byte)
' Byte
Public Declare Sub VBEX_SortByteAr Lib "vbex32.dll" _
Alias "VBSORTARRAYB" ( _
sArr() As Byte, _
ByVal nVon As Long, _
ByVal nBis As Long, _
ByVal nDirection As Byte)
' Single
Public Declare Sub VBEX_SortSingleAr Lib "vbex32.dll" _
Alias "VBSORTARRAYS" ( _
sArr() As Single, _
ByVal nVon As Long, _
ByVal nBis As Long, _
ByVal nDirection As Byte)
' Double
Public Declare Sub VBEX_SortDoubleAr Lib "vbex32.dll" _
Alias "VBSORTARRAYD" ( _
sArr() As Double, _
ByVal nVon As Long, _
ByVal nBis As Long, _
ByVal nDirection As Byte)
' Currency
Public Declare Sub VBEX_SortCurrencyAr Lib "vbex32.dll" _
Alias "VBSORTARRAYC" ( _
sArr() As Currency, _
ByVal nVon As Long, _
ByVal nBis As Long, _
ByVal nDirection As Byte) |
Bingo: Womit schon mal der erste Parameter erklärt ist: Er bestimmt das Feld und den Variablentyp aus dem das Feld besteht ... ganz easy! Und das ist in allen 28 Funktionen gleich!!!
nVon: Startindex ab der eine Operation beginnt
nBis: Endwert(Index) bis zu der eine Operation dauert.
Soll alles sortiert werden, setzen Sie die Parameter nVon und nBis auf Null.
nDirection: Gibt die Richtung an: 0 = Aufsteigend = 0 bzw. 1 = absteigende Sortieruung
Beispiel:
Code: | ReDim iArray(2) As Integer
iArray(0) = 3
iArray(1) = 1
iArray(2) = 2
' gesamtes Array aufsteigend sortieren
VBEX_SortIntegerAr iArray(), 0, 0, 0 |
_________________ 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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
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.
|
|