Seite 1 von 2

Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 10:51
von Hawk78
Hallo!

Ich würde gerne Daten zwischen einer PureBasic DLL und Visual Basic 6 austauschen.
Strings und numerische Datentypen lassen sich ja austauschen.

Wie sieht es mit eingebetteten Files ("IncludeBinary" in "DataSection") aus? Gibt es eine Möglichkeit, z.B. eine Bitmap aus der DLL an VB zu übergeben und diese dort in einer PictureBox anzuzeigen?

Viele Grüße
Hawk78

Re: Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 17:07
von STARGÅTE
Ja das geht, du musst halt nur in der DLL, wo die Daten drin liegen, eine Funktion definieren, die dir dann die Adressen zurück geben kann.

Hier mal ein Beispiel für die DLL:

Code: Alles auswählen

ProcedureDLL.i GetImage(Number.i) ; gibt die gewünschte Adresse zurück
	Select Number
		Case 1
			ProcedureReturn ?Image1
	EndSelect
EndProcedure

DataSection
	Image1:
	IncludeBinary "Image1.png"
EndDataSection
Und das Beispiel zur Nutzung:

Code: Alles auswählen

Import "Evaluate.lib"
  GetImage(*Function)
EndImport

Enumeration
	#Image
EndEnumeration

UsePNGImageDecoder()

CatchImage(#Image, GetImage(1)) ; Lädt das Image aus dem Ort der durch GetImage aus der DLL zurückgegeben wird.

ShowLibraryViewer("Image", #Image)
CallDebugger

Re: Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 17:31
von ts-soft
So bekommt er kein PictureObject, eher so:

Code: Alles auswählen

UsePNGImageEncoder()

ProcedureDLL.i GetImage(Number.i) ; gibt hDC zurück.
   Select Number
      Case 1
         ProcedureReturn CatchImage(1, ?Image1)
   EndSelect
EndProcedure

DataSection
   Image1:
   IncludeBinary "Image1.png"
EndDataSection 
Aber mangels VB6 kann ich es nicht testen.

Re: Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 17:36
von STARGÅTE
@ts-soft

Ne so geht das garnicht, weil das Image mit der Nummer 1 nur in der DLL verfügbar wäre.

So wie ich Hawk78 verstanden habe, möchte er die DLL ja nur als "DataSection" benutzten und das Bild normal als PNG drinne lagern und dann mit VB6 dieses Bild laden.

Re: Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 17:55
von ts-soft
Dann muss er es aber vorher speichern und braucht die Länge.
Das von meinem Code zurückgegebene Handle ist solange gültig, wie die DLL
geladen bleibt und das ganze hab ich schon mit anderen Sprachen gemacht,
das funktioniert. Kann aber sein, das er unbedingt ein OLE-Object benötigt,
das weiß ich jetzt nicht.

Re: Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 18:40
von Hawk78
STARGÅTE hat geschrieben:...So wie ich Hawk78 verstanden habe, möchte er die DLL ja nur als "DataSection" benutzten und das Bild normal als PNG drinne lagern und dann mit VB6 dieses Bild laden.
genau! Ich möchte die DLL als "Medienspeicher" nutzen, damit die VB exe nicht unötig groß wird. Ich suche schon lange eine Lösung für das Problem, habe aber leider noch keine funktionierende Lösung dafür gefunden. Vielleicht geht es ja irgendwie...alternativ kann man ja auch eine C++ DLL nehmen...wenn es leichter geht...

Die Frage ist halt, wie ich aus den DLL-Binary-Daten wieder ein Picture/bzw. Image Objekt machen kann...?!

Danke für eure Hilfe,
Gruß
Hawk78

Re: Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 18:52
von ts-soft
Hawk78 hat geschrieben:Die Frage ist halt, wie ich aus den DLL-Binary-Daten wieder ein Picture/bzw. Image Objekt machen kann...?!
Genau das macht mein Codebeispiel, gibt ein ImageObject zurück!

Die DLL muss aber per LoadLibrary geladen werden.

Re: Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 19:40
von Hawk78
Das Beispiel für die Nutzung ist doch ein VB .net Beispiel und nicht (wie gesucht) für VB6, oder täusche ich mich?!

Gruß
Hawk78

Re: Dll -> IncludeBinary -> VB6

Verfasst: 23.03.2012 19:49
von ts-soft
Ich habe kein Beispiel für die Nutzung gepostet und das Beispiel zur Nutzung von STARGÅTE ist in PB geschrieben :mrgreen:
Das laden der DLL und aufrufen von GetImage(1) musst Du wohl selber schreiben :wink:

Re: Dll -> IncludeBinary -> VB6

Verfasst: 24.03.2012 18:30
von Andreas21