Dll -> IncludeBinary -> VB6

Für allgemeine Fragen zur Programmierung mit PureBasic.
Hawk78
Beiträge: 3
Registriert: 23.03.2012 10:44

Dll -> IncludeBinary -> VB6

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Dll -> IncludeBinary -> VB6

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Dll -> IncludeBinary -> VB6

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Dll -> IncludeBinary -> VB6

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Dll -> IncludeBinary -> VB6

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Hawk78
Beiträge: 3
Registriert: 23.03.2012 10:44

Re: Dll -> IncludeBinary -> VB6

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Dll -> IncludeBinary -> VB6

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Hawk78
Beiträge: 3
Registriert: 23.03.2012 10:44

Re: Dll -> IncludeBinary -> VB6

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Dll -> IncludeBinary -> VB6

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Dll -> IncludeBinary -> VB6

Beitrag von Andreas21 »

Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Antworten