D-Lib 2.0 script sprache

Anwendungen, Tools, Userlibs und anderes nützliches.
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

Beitrag von ts-soft »

@Mischa
:allright: Klasse, das mit der Runtime DLL ist eine feine Sache, vielleicht
sollte man den Compiler auch so abändern, so das direkt die Sourcen genutzt
werden können, also compileren und ausführen über eine DLL?
Auf jedenfall kann ich meine Pläne, LUA zu lernen jetzt vergessen, so ist es
einfacher :D

Hab das Beispiel "pb_com_example.pb" mal um GetExePath ergänzt, so läuft es auch ohne Pfadanpassung.

Code: Alles auswählen

;Simple example how to communicate with 'mother'- application
;Maybe its a bit useless to give only one function address to the script,
;but this is only for demonstration. Normaly you would allocate one
;memoryblock with a pointer table of all functions you want share,
;or something

;PLEASE CREATE EXECUTABLE, OR CORRECT PATH TO DCF

Procedure.s GetExePath()
  Protected Result.s
  If UCase(GetPathPart(ProgramFilename())) = UCase(#PB_Compiler_Home + "Compilers\")
    Result = GetCurrentDirectory()
  Else
    Result = GetPathPart(ProgramFilename())
  EndIf
  If Right(Result, 1) <> "\" : Result + "\" : EndIf
  ProcedureReturn Result
EndProcedure

Global answer.s

Procedure MyFunction(text.s)
  MessageRequester("Comes in from D-Lib..",text)
  answer="Oh, hello D-Lib. Nice to meet you."
  ProcedureReturn @answer
EndProcedure

OpenLibrary(0,"DRun.dll")
Result = CallFunction(0,"StartDLibScript", GetExePath() + "dlib_com_part.dcf",@MyFunction())

MessageRequester("DLib Return value",Str(Result))
Hab nämlich getestet ohne zu lesen :mrgreen: , da kam nur -1 :lol:

Gruß
Thomas
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
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

Beitrag von ts-soft »

DLib läßt mich nicht los :D
Möchte noch ein WebGadget spendieren, evtl. noch anpassen, doku ist ja noch dünne.

Code: Alles auswählen

;## Begin Lib ##
Declare _webctrlinit.l

ProcedureLib CreateWebControl(hWnd.l, x.l, y.l, cx.l, cy.l, url.s, flag.l, extflag.l)
	Declare handle.l
	If _webctrlinit = 0
		AtlAxWinInit()
		_webctrlinit = 1
	EndIf
	handle = CreateWindowEx(extflag, "AtlAxWin", url, #WS_CHILD | #WS_VISIBLE | flag, x, y, cx, cy, hWnd, 0, 0, 0)
	ProcedureReturn handle
EndProcedure
;## Ende Lib ##


; Testcode
Declare hWnd.l, webcontrol.l, ende.l, message.l

hWnd = WindowCreate(100, 100, 750, 750, "Meine Homepage", #WS_SYSMENU)

If hWnd
	webcontrol = CreateWebControl(hWnd, 0, 0, 750, 750, "http://ts-soft.eu", 0, 0)

	While ende = 0
		message = WaitWinMessage()
		If message = #WM_CLOSE
			ende = 1
		EndIf
	Wend
EndIf
// Nachtrag:
Ich benötige eine Function, die eine DLL hinzufügt und lädt, also
LoadLibrary für interne DLL. Da die DLL keine Function enthält, bzw.
Controls enthält, kann ich diese nur erzeugen, wenn die DLL geladen
wurde.
Nach dem laden, sollte der autom. der Classenname für diese Controls zur
Verfügung stehen, so das ich das Control erstellen kann. Ich hoffe das ist
verständlich ausgedrückt :shock:
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
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag von Mischa »

@ts-soft

Das ist nett vond Dir. :)

Das was Du brauchst heißt 'IncludeLib'

Beispiel:

IncludeLib RICHED20

Also ohne .dll schreiben.

Es geht auch:

IncludeLib Kernel32, User32, ...

Gruß,
Mischa
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

Beitrag von ts-soft »

IncludeLib ist nicht ganz das richtige, der kopiert die DLL und lädt sie auch,
ich möchte sie aber richtig Includieren! IncludeData???
RaEdit geht schon ein bissel, aber die DLL includiert wäre mir lieber :)

Gruß
Thomas
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
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag von Mischa »

IncludeLib ?MeineDll

Per ? wird inkludiert.

Ich hatte gedacht Du sprichst von einer System-Dll.. /:->

Gruß,
Mischa
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

Beitrag von ts-soft »

Mischa hat geschrieben:IncludeLib ?MeineDll

Per ? wird inkludiert.
Danke, funktioniert

Jetzt ergibt sich aber folgendes Problem:
Beim Beenden entlädt D-Lib die DLL vor dem Fenster zerstören (PB macht das auch :freak: )
Als Workaround hab ich ein DestroyWindow(hWnd) eingefügt, dann gehts.
Besser wäre es die Reihenfolge zu ändern. Also DLLs erst ganz am schluß
zu entladen (nicht in einem Callback)

Gruß
Thomas

// Nachtrag:
Mit Controlls aus DLLs habe ich folgendes Problem:
Sie werde nicht richtig angezeigt und GetLastError() gibt 1400 #ERROR_INVALID_WINDOW_HANDLE
zurück. Vielleicht weißte was da fehlen sollte, in PB und Profan laufen
die Controls einwandfrei
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
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag von Mischa »

@ts-soft

Zum Control Problem: Bitte Beispiel.

Zum Dll entladen.
Sorry, war mein Fehler. (Nicht PBs) :oops:
Die Reihenfolge sollte nun stimmen.
In der Dll-Version hatte ich auch noch vergessen, die OnError-
Geschichten rauszunehmen. Grrmpf! :roll:

Ist jetzt beides behoben.
Darüberhinaus habe ich der DRun.dll noch die Möglichkeit
verpasst, DCFs direkt aus dem Speicher zu catchen.

Ach übrigens, wenn man ein Fenster doch mal vorab schließen muß,
bitte nicht DestroyWindow() verwenden sondern WindowClose(hWnd),
weil für jedes Fenster noch Zusatzdaten abgelegt sind, die sonst nicht
sofort wieder freigegeben werden. (Bei Programmende aber schon)
Dies gilt nicht für Controls, die MUß man mit DestroyWindow()
schließen, wenn man dies vorzeitig wünscht. Braucht man aber nicht
regulär. Wenn das Fenster zu ist, sind die Controls eh weg.
Wird Zeit die Hilfe zu Ende zu schreiben. :|

Wegen der Veränderungen:
Download again..

Gruß,
Mischa
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

Beitrag von ts-soft »

Mischa hat geschrieben:@ts-soft
Zum Control Problem: Bitte Beispiel.
Da Du auch die DLLs brauchst, hab ichs mal gezippt. Ich denke mal die
beiden Controls wären eine schöne Erweiterung für d-lib

http://ts-soft.eu/dl/ts_dlibsource.zip

Ansonsten klappt alles, danke

Gruß
Thomas

// Nachtrag:
Von der Grafikdemo sind die Bilder beschnitten :wink:

Code: Alles auswählen

image.l  = CatchPicture(?MyImage,?label-?MyImage,0)
width.l  = PictureWidth(image)
height.l = PictureHeight(image) + GetSystemMetrics(#SM_CYCAPTION)

image2.l  = CatchPicture(?label,?EndofMyImage-?label,RGB(255,255,255))
width2.l  = PictureWidth(image2)
height2.l = PictureHeight(image2) + GetSystemMetrics(#SM_CYCAPTION)
so sieht man alles
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
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag von Mischa »

@ts-soft

Unter PB 4.0 und PB 4.02 laufen Deine Beispiele genauso wenig
korrekt. :cry:

Selbst wenn ich ein reines API-Fenster unter PB erstelle.
Immer Fehler '1400'.

Hm..

Gucks Dir an:
http://www.thinkrelative.de/ts_dlibToPBsource.zip

Gruß,
Mischa
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

Beitrag von ts-soft »

Merkwürdig, unter PB hab ich aus beiden ja native Gadgets gemacht und für
RaEdit nutze ich die statische Lib.

Unter Profan funktioniert der DockSplitter auf diese Art :cry:
Danke erstmal, ich werde mal sehen ob ich noch nen Fehler finde.
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
Antworten