Wünsche und Anregungen | | | | H.Brill | Ich hätte mir das jetzt so gedacht, daß ich die .ph zuerst schreibe und dann mit $H einlese : KompilierenMarkierenSeparieren $I MemoryModule.inc
Declare Handle hResInfo, hModule, Grid, gView
Declare Memory FN, LV
Declare Int anz, String Func, spalte
Declare pfunc&
Window 600, 450
Grid = @Create("Gridbox", %HWnd, "Nr;0;50;Adresse;0;100;Funktionsname;0;200", 0, 80, 10, 400, 200)
ShowWindow(Grid, 0)
hResInfo = Res("Info", %HInstance, 10, "listview", 0)
IF hResInfo > 0
Dim LV, Res("size", %HInstance, hResInfo)
LV = Res("Get", %HInstance, hResInfo)
hModule = LoadLibraryM(LV)
EndIf
hResInfo = Res("Info", %HInstance, 10, "FUNKTIONEN", 0)
IF hResInfo > 0
Dim FN, Res("size", %HInstance, hResInfo)
FN = Res("Get", %HInstance, hResInfo)
anz = Move("MemToList", FN, Chr$(13)+ chr$(10))
Assign #1, $ProgDir + "INCLUDE\Listview.ph"
Rewrite #1
WHILELOOP 0, anz - 1
Func = GetString$(0, &LOOP)
'IMPORTFUNC(hModule, Func, "") ' Geht hier nicht
pFunc& = GetProcAddressM(hModule, Func)
AddString(Grid, Str$(&LOOP) + "|" + Str$(pFunc&) + "|" + Func)
Print #1, Func; "( = CALL(";Str$(pFunc&);",;"
ENDWHILE
Close #1
ENDIF
Print "Fertig..."
Waitkey
$H Listview.ph
ShowWindow(Grid, 1)
' Listview erstellen
gView = ~CreateListview(%HWnd, %HInstance, 0, $ffffff, -1, $31)
spalte = "1.Spalte"
~IColumn(gView, spalte, 120, 0)
spalte = "2. Spalte"
~IColumn(gView, spalte, 240, 0)
~ShowListview(gView, 10, 250, 400, 100)
Waitkey
FreeLibraryM(hModule)
End
Aber irgendwie ist da noch der Wurm drin. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 14.10.2014 ▲ |
| |
| | H.Brill | Ich hätte mir das jetzt so gedacht, daß ich die .ph zuerst schreibe und dann mit $H einlese : KompilierenMarkierenSeparieren $I MemoryModule.inc
Declare Handle hResInfo, hModule, Grid, gView
Declare Memory FN, LV
Declare Int anz, String Func, spalte
Declare pfunc&
Window 600, 450
Grid = @Create("Gridbox", %HWnd, "Nr;0;50;Adresse;0;100;Funktionsname;0;200", 0, 80, 10, 400, 200)
ShowWindow(Grid, 0)
hResInfo = Res("Info", %HInstance, 10, "listview", 0)
IF hResInfo > 0
Dim LV, Res("size", %HInstance, hResInfo)
LV = Res("Get", %HInstance, hResInfo)
hModule = LoadLibraryM(LV)
EndIf
hResInfo = Res("Info", %HInstance, 10, "FUNKTIONEN", 0)
IF hResInfo > 0
Dim FN, Res("size", %HInstance, hResInfo)
FN = Res("Get", %HInstance, hResInfo)
anz = Move("MemToList", FN, Chr$(13)+ chr$(10))
Assign #1, $ProgDir + "INCLUDE\Listview.ph"
Rewrite #1
WHILELOOP 0, anz - 1
Func = GetString$(0, &LOOP)
'IMPORTFUNC(hModule, Func, "") ' Geht hier nicht
pFunc& = GetProcAddressM(hModule, Func)
AddString(Grid, Str$(&LOOP) + "|" + Str$(pFunc&) + "|" + Func)
Print #1, Func; "( = CALL(";Str$(pFunc&);",;"
ENDWHILE
Close #1
ENDIF
Print "Fertig..."
Waitkey
$H Listview.ph
ShowWindow(Grid, 1)
' Listview erstellen
gView = ~CreateListview(%HWnd, %HInstance, 0, $ffffff, -1, $31)
spalte = "1.Spalte"
~IColumn(gView, spalte, 120, 0)
spalte = "2. Spalte"
~IColumn(gView, spalte, 240, 0)
~ShowListview(gView, 10, 250, 400, 100)
Waitkey
FreeLibraryM(hModule)
End
Aber irgendwie ist da noch der Wurm drin. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 14.10.2014 ▲ |
| |
| | Georg Teles | Das verstehe ich nicht ganz, die Funktionen haben ja verschiedene Anzahl von Parametern & die müssen ja berücksichtigt werden |
| | | | |
| | | Georg Teles (14.10.14)
Naja, es ist schon nervig 117 zu schreiben
Kannst ja per PH aus einem call(proc117,"test") einfach ein foo("test") machen. |
| | | | |
| | Georg Teles | Naja, es ist schon nervig 117 zu schreiben aber nachher kann man die PCU immer wieder benutzen und die DLL wird im Programmcode mitgeliefert ich mein, dann steht am Ende die bloße .EXE
...aber Proc kann man auch so lassen (je nachdem wieviele Parameter stehen) KompilierenMarkierenSeparieren ich schreib die mal in PCU rein wenn ich demnächst Langeweile hab xD |
| | | | |
| | | | - Seite 5 - |
| | | Hm, hilft Dir vlt.: KompilierenMarkierenSeparieren wird zu: KompilierenMarkierenSeparieren//einmalig zu programmstart:
__cf45&=__cf3("TEST")
//später nur noch
PRINT call(__cf45&)
und __cf3 übersetze ich mit: KompilierenMarkierenSeparieren
proc __cf3
parameters fName$
casenot __cfObj&:__cfInit
casenot long((long(__cfObj&,0)+120),4) : return 0
case (long(long(__cfObj&,4)+long((long(__cfObj&,0)+120),0),24)=0) or (long(long(__cfObj&,4)+long((long(__cfObj&,0)+120),0),20)=0) : return 0
var addr&=-1
var fNam&=long(__cfObj&,4)+long(long(__cfObj&,4)+long((long(__cfObj&,0)+120),0),32)
var fOffs&=long(__cfObj&,4)+long(long(__cfObj&,4)+long((long(__cfObj&,0)+120),0),36)
whileLoop long(long(__cfObj&,4)+long((long(__cfObj&,0)+120),0),24)
if string$(long(__cfObj&,4)+long(fNam&,0),0)=fName$
addr&=word(fOffs&,0)
break
endif
inc fNam&,4
inc fOffs&,2
wend
case (addr&=-1) or (addr& > long(long(__cfObj&,4)+long((long(__cfObj&,0)+120),0),20)) : return 0
return long(__cfObj&,4)+long(long(__cfObj&,4)+long(long(__cfObj&,4)+long((long(__cfObj&,0)+120),0),28)+(addr&*4),0)
endproc
und __cfObj& ist das MemoryModule-Handle.
Damit lässt sich doch die Funktionsadresse einer Funktion aus einem MemoryModule beziehen und der Rest wäre dann ph-ersetze und inc. |
| | | | |
| | H.Brill | Also, das mit den .ph -Dateien schaue ich mir mal an. Was ich meinte : Wenn ich eine DLL auf Platte mit ImportDLL() importiere, brauche ich keine .ph oder .inc Dateien mehr. Da brauche ich sonst nix zu machen. Seit es diese Funktion in XProfan gibt, brauche ich auch Franks Listview_Funktionen.inc nicht mehr.
Daher dachte ich, ImportFunc() in einer Schleife laufen zu lassen, um die Funktionen statisch zu linken. Die Adressen und Funktionsnamen habe ich ja. Das scheint aber nur zu gehen, wenn die DLL physikalisch auf Platte ist. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 14.10.2014 ▲ |
| |
| | | In XPSE mache ich das so, dass ich einmal zu programmstart die Funktionsadressen in einfache HANDLE speichere und dann direkt darauf ein Call mache.
Das böte sich doch auch für Dich an.
Also einmal ein
dieFunktion=getprocaddr(...,
und
dieAndereFunktion=getprocaddr(...,
und dann nur noch
call(dieFunktion,...
und
call(dieAndereFunktion,...
Das kann man dann auch nochmal verfeinern dank der
Headerdateien (ph's)
denn dann könntest Du sogar aus
call(dieFunktion,...
ein direktes
dieFunktion(
machen da die Headerdateien ja komplette Textblöcke ersetzen können.
Also ne PH und ne INC und dann dürftest Du doch genau das haben oder ich hab nicht kappiert was erwünscht ist. |
| | | | |
| | H.Brill | Danke, aber genau das wollte ich mir ersparen. Mit ein paar Funktionen geht das ja noch prima, aber bei den 117 Funktionen der Listview.dll die ganzen Procs schreiben....
Daher wäre mir ein direktes Linken der Funktionen lieber gewesen. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 14.10.2014 ▲ |
| |
| | Georg Teles | Also ja du kannst schon mit Modulen arbeiten, binde doch die DLL einfach als PCU in dein Programm mit ein, du müsstest aber alle Funktionen korrekt reinschreiben, denke das ist die bessere Lösung ersteinmal.
Habe sowas mit SKControl.dll mal gemacht gehabt, schau mal hier Herunterladen Grüße |
| | | | |
| | H.Brill | Mit den Resourcen in X3 ist ja eine feine Sache. Ich habe jetzt mal die Listview.dll von Frank eingebunden. Über ImportDLL() habe ich mir die Funktionen mit (*) in die Listboxliste geschrieben und als Datei gespeichert und diese auch eingebunden. Nun möchte ich mit der Include MemoryModule.inc arbeiten. Das klappt auch soweit. KompilierenMarkierenSeparieren $I MemoryModule.inc
Declare Handle hResInfo, hModule, Grid, gView
Declare Memory FN, LV
Declare Int anz, String Func, spalte
Declare pfunc&
Window 600, 450
Grid = @Create("Gridbox", %HWnd, "Nr;0;50;Adresse;0;100;Funktionsname;0;200", 0, 80, 10, 400, 200)
ShowWindow(Grid, 0)
hResInfo = Res("Info", %HInstance, 10, "listview", 0)
IF hResInfo > 0
Dim LV, Res("size", %HInstance, hResInfo)
LV = Res("Get", %HInstance, hResInfo)
hModule = LoadLibraryM(LV)
EndIf
hResInfo = Res("Info", %HInstance, 10, "FUNKTIONEN", 0)
IF hResInfo > 0
Dim FN, Res("size", %HInstance, hResInfo)
FN = Res("Get", %HInstance, hResInfo)
anz = Move("MemToList", FN, Chr$(13)+ chr$(10))
WHILELOOP 0, anz - 1
Func = GetString$(0, &LOOP)
'IMPORTFUNC(hModule, Func, "") ' Geht hier nicht
pFunc& = GetProcAddressM(hModule, Func)
AddString(Grid, Str$(&LOOP) + "|" + Str$(pFunc&) + "|" + Func)
ENDWHILE
ENDIF
Print
Print "Fertig..."
Waitkey
ShowWindow(Grid, 1)
' Listview erstellen
pfunc& = Val(GetText$(Grid, 13, 1))
gView = Call(pfunc&, %HWnd, %HInstance, 0, $ffffff, -1, $31)
spalte = "1.Spalte"
pfunc& = Val(GetText$(Grid, 69, 1))
Call(pfunc&, gView, spalte, 120, 0)
spalte = "2. Spalte"
Call(pfunc&, gView, spalte, 240, 0)
pfunc& = Val(GetText$(Grid, 114, 1))
Call(pfunc&, gView, 10, 250, 400, 100)
Waitkey
FreeLibraryM(hModule)
End
Was jetzt mein Anliegen wäre, ist die Zuordnung der Funktionen. Wie man oben sieht, ist das mit Call(...) ja nicht sehr leserlich. ImportFunc() scheint hier nicht zu funktionieren. Wenn es jetzt sowas gäbe, wie ImportDLL(), das die Funktionen dazu linkt. Das ImportDLL() ist ja klasse, da man sich die Include mit all den Funktionsdeklarationen erspart. ImportDLL() erwartet im Moment ja als Parameter einen Dateinamen und nicht ein Handle.
Roland, wäre sowas machbar ? Die Funktionsadressen und die dazu gehörenden Funktionsnamen haben wir ja schon. So wie ich es oben in der Schleife gemacht habe, scheinen ja die Adressen und deren Namen synchron zu laufen.
Oder hat jemand noch eine Idee, wie man das automatisieren könnte ? |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 13.10.2014 ▲ |
| |
| | Jörg Sellmeyer | Hier können Vorschläge gemacht werden, die spätere Versionen betreffen. Auch Links zu schon existierenden Vorschlägen sollten hier gesammelt werden. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.09.2014 ▲ |
| |
|
AntwortenThemenoptionen | 35.385 Betrachtungen |
ThemeninformationenDieses Thema hat 8 Teilnehmer: |