  | 
					
						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, 14: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: 18.06.2005, 23: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.
  | 
   
 
     |