Seite 4 von 4
Verfasst: 05.06.2008 13:14
von ts-soft
H.Brill hat geschrieben:
Andere Frage : Kann ich hModule.l bestücken,
indem ich eine .EXE mit RunProgramm starte
und hmodule dann die ProgamID() zuordne ?
Nicht mit RunProgramm, mit OpenLibrary oder LoadLibrary_ API
Die Befehle gehen auch mit Exen
Verfasst: 05.06.2008 13:52
von H.Brill
Danke,
wußte ich nicht, da nicht in der PB-Hilfe
beschrieben.
Verfasst: 05.06.2008 14:03
von ts-soft
Hier noch was mit ProcessID, ungetestet, wäre nett wenn Du die Funktion
bestätigen könntest, hab keine Lust mir auch noch ein Beispiel zu basteln
Code: Alles auswählen
Define.MODULEENTRY32 MO_ENTRY
Define.l ProcessID ;= RunProgram(...)
Define.l snap = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, ProcessID)
If (snap <> #INVALID_HANDLE_VALUE)
MO_ENTRY\dwSize = SizeOf(MO_ENTRY)
If Module32First_(snap, @MO_ENTRY)
Debug "ModuleHandle = " + Str(MO_ENTRY\hModule)
EndIf
CloseHandle_(snap)
EndIf
gruß
Thomas
Wir weichen ab und dieser Code paßt nicht ins Anfängerforum
Verfasst: 05.06.2008 14:25
von H.Brill
Brauchste nicht.
Es ging mir darum, es zu wissen bzw. wie es geht.
Das Ganze mit dem hmodule ist ja nur interessant,
wenn die DLL/Exe mit PB geschrieben und mit
Import...EndImport die .res eingebunden ist und
als Quellcode nicht verfügbar ist. Ansonsten sehe ich
keinen Bedarf, eine .exe mit PB zu erstellen, um sie
dann später in eine andere mit PB erstellte .EXE zu
integrieren. Da schreibt man sich lieber eine Procedure
oder Include-Datei.
Alle anderen Drittanbieter wissen ja nix von PB_DATA.
In Fremdprogrammen/DLLs besteht dann noch die Möglich-
keit, mit einem ResourceHacker die .res zu integrieren.
Wie gesagt, der Vorteil der UDRes ist bei mir, daß ich meine
Resourcen leicht warten und dazu noch gepackt integrieren
kann.
Verfasst: 06.06.2008 15:49
von Marie23
Noch 2 Fragen:
Kann ich UDRes nicht SO verwenden, dass ich die DLL Funktionen ganz normalen benutzen kann?
Ohne irgendwas mit UDRes davor?
Und 2. kann ich die Resourcen so benutzen, dass ich sie mit IncludeBinary einbinden kann?
Verfasst: 06.06.2008 16:29
von ts-soft
Marie23 hat geschrieben:Noch 2 Fragen:
Kann ich UDRes nicht SO verwenden, dass ich die DLL Funktionen ganz normalen benutzen kann?
Ohne irgendwas mit UDRes davor?
Nein, natürlich nicht
Marie23 hat geschrieben:
Und 2. kann ich die Resourcen so benutzen, dass ich sie mit IncludeBinary einbinden kann?
Nein, mit Import.
Mit IncludeBinary kann man zwar "Resourcen" im Sinne von Bildern usw.
aber keine Resourcen im Sinne von Windows Resourcen einbinden
Meine Methode ist eher Windows-Standard, das mit Include-Binary hat nur
den Vorteil, das es auch unter anderen Betriebssystemen funktioniert, weil
Linux und MacOS natürlich keine Windows-Resourcen kennen.
Meine Resourcen werden vom Linker in eine Extra-Resourcen Sektion
gelinkt (ziemlich am Ende des Programms), mit IncludeBinary wird in der
normallen DataSection des Programms platziert und deshalb auch mit der
Exe in den Speicher geladen.
Verfasst: 06.06.2008 19:53
von H.Brill
Geht auch mit IncludeBinary. Aber ob es die
ideale Lösung ist ? Allerdings mußt du die PBOSL
lib wegen LoadLibraryM(), GetProcAddressM() und
FreeLibraryM() installieren.
Code: Alles auswählen
Global adress.l = LoadLibraryM(?MemoryPointer)
value.l = CallFunctionFast(GetProcAddressM(adress, "DLLFunction"), Parameter......)
DataSection
MemoryPointer:
IncludeBinary "deine.dll"
EndDataSection
Verfasst: 06.06.2008 20:04
von ts-soft
Ich weiß nicht in wieweit PBOSL bereits geupdated für PB 4.20 wurde, somit
gehe ich davon aus, es wird wohl mit einigen Libs Probleme geben,
besonders die mit Tailbite kompilierten.
LoadDLLMemory sollte aber gehen (ist C-Source), aber für einen Einsteiger,
der dann evtl. mit Fehlern anderer Libs kämpfen muß, bringts im Moment
keine Vorteile, zumal die Syntax ja ähnlich (beruht ja auf gleichem Source von J. Bauch) ist.
Verfasst: 07.06.2008 07:57
von H.Brill
Also bei mir funktioniert die einzelne Lib
vom 4.6.2006 bei PB4.20.
Im Notfall kann man ja auch die DLL bei Programmstart
wieder auf Platte schreiben und mit den normalen Library
Befehlen arbeiten.