Deutsch
Wünsche und Anregungen

Vorschläge für künftige Versionen

 

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
 
XProfan X2
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

14.10.2014  
 



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.
 
14.10.2014  
 




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
Proc _funktion1

    Parameters p1&,p2&,p3&
    call(_funktion1,p1&,p2&,p3&)

EndProc


ich schreib die mal in PCU rein wenn ich demnächst Langeweile hab xD
 
XProfan X2
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

14.10.2014  
 



 
- 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.
 
14.10.2014  
 




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.
 
14.10.2014  
 




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

582 kB
Hochgeladen:14.10.2014
Ladeanzahl58
Herunterladen
 
XProfan X2
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

14.10.2014  
 




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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

35.421 Betrachtungen

Unbenanntvor 0 min.
Stringray09.05.2022
Rolf Koch03.10.2021
Axel Berse16.07.2021
Jörg Sellmeyer28.05.2020
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie