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

Das laden der DLL und aufrufen von GetImage(1) musst Du wohl selber schreiben

Re: Dll -> IncludeBinary -> VB6
Verfasst: 24.03.2012 18:30
von Andreas21