Deutsch
Bücher & Tutorials

Ex"Kurs" DLL's mit Profan2Cpp erstellen

 

Sebastian
König
Siehe auch Tutorials zum Thema: [...] 

Profan2Cpp-Hilfe

Die Direktive $DLL, die am Anfang des Quellcodes stehen sollte, teilt Profan2Cpp mit, dass eine DLL generiert werden soll.

Prozeduren, die exportiert werden sollen, werden mit dllproc eingeleitet. Nach dem Namen der Prozedur wird dabei als zweites Argument die Anzahl der Parameter, die die Prozedur erwartet, angegeben. Diese Zahl sollte natürlich mit dem, was später mit parameters spezifiziert wird, übereinstimmen. Mit dllproc deklarierte Prozeduren können nicht verschachtelt werden.

Seit Profan2Cpp 1.6a kann als dritter Parameter optional ein Stringliteral (Ausdruck in Anführungszeichen, keine Variable!) angegeben werden, der den genauen Export-Namen der Prozedur angibt. (...)


Beispiel-Code:
KompilierenMarkierenSeparieren
So kann man die DLL dann verwenden (.inc wird automatisch von Profan2Cpp erzeugt):
KompilierenMarkierenSeparieren
 $I dlltest.inc Definitionen einbinden...
declare hDll&
let hDll& = @UseDll(dlltest.dll)
Cls
Funktion aus der DLL aufrufen:
Print countprimes(10000)
WaitKey
FreeDll hDll&
End

MfG

Sebastian

Siehe auch: Umfrage DLLs mit Profan2Cpp? [...] 
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
11.03.2009  
 




Jac
de
Lad
Wie stehts mit Controls und so, können die in Profan erzeugt und in der DLL benutzt werden und umgekehrt? Gibt es Einschränkungen?
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
11.03.2009  
 




Sebastian
König
Jac
Wie stehts mit Controls und so, können die in Profan erzeugt und in der DLL benutzt werden und umgekehrt? Gibt es Einschränkungen?


*seufz* Und ich hab mir soviel Mühe mit dem Schreiben der Dokumentation gegeben.. Hier also noch ein Auszug:
Profan2Cpp-Hilfe
Eine größere Einschräkung gibt es leider: Innerhalb der DLL sollten keine Befehle oder Funktionen, die Fenster oder Fensterelemente erzeugen, verwendet werden; das Verhalten ist sonst unvorhersehbar. @SendMessage() und @PostMessage() funktionieren jedoch - und auch MessageBoxes stehen zur Verfügung.


Ergänzend dazu ist zu sagen, dass über API natürlich alles erlaubt ist. Die Einschränkung bezieht sich nur auf Sachen wie Create() und Control(), und bei Create() auch nur auf Fensterelemente.

Generell würde man aber auch sowiese eher Performance-kritische Sachen in eine C++-DLL auslagern, und da gehören GUI-Sachen mit Fenstern meiner Erfahrung nach selten dazu...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
11.03.2009  
 



Jup, das ist eine gute Demo. Danke.

Na, dann kann ich ja einiges bei meinem Programmen mal umgestalten/auslagern.

mfg
 
11.03.2009  
 




Detlef
Jagolski
Ich habe mir mit Profan2Cpp für meine Owner-Draw Menüs eine Dll gebaut mit noch weitern Funktionen die ich immer brauche.

14 kB
Hochgeladen:11.03.2009
Ladeanzahl396
Herunterladen
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
11.03.2009  
 




Sebastian
König
Detlef Jagolski
Ich habe mir mit Profan2Cpp für meine Owner-Draw Menüs eine Dll gebaut mit noch weitern Funktionen die ich immer brauche.


Ein schönes Beispiel, das gleichzeitig zeigt, dass auch Fenster-bezogene Dinge möglich sind.

Meine eigene Aussage von oben (Antwort and Jac) habe ich dabei nochmal näher bedacht und muss nun sagen: Es ist wohl nicht nur bei Dingen, für die eine hohe Geschwindigkeit wichtig ist, sinnvoll sie in eine DLL auszulagern. Vielleicht möchte man auch einfach eine DLL zur Verwendung in mehreren Projekten und/oder zur Veröffentlichung erstellen.

Der Zwischenstand der Umfrage (wenn auch nicht sehr repräsentativ) lässt mich mit dem Gedanken spielen, einen Workshop zu dem Thema zu erstellen. Ich könnte mir zum Beispiel vorstellen, einen Anfang meiner SKControl.DLL in XProfan nachzubauen...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
11.03.2009  
 




Sebastian
König
Jac
Noch ne blöde Frage: Wenn ich in XProfan was in die interne Listboxliste fülle, dann kann ich in einer DLL, die mit Prf2CPP erstellt wurde nicht darauf zugreifen oder? Und umgekehrt sicher auch nicht? Das wäre einer der Gründe auf DLL-Erstellung zu verzichten, im entsprechenden Fall jedenfalls.


Einfache Frage - die Antwort ist etwas kompliziert Ohne es probiert zu haben, würde ich aus dem Gedächtnis sagen, dass innerhalb des DLL-Codes folgendes gilt:

* Füllen und Ändern der Liste funktioniert
* MoveListToStr$/Mem/Array() auch
* MoveListToHandle() funktioniert nicht mit List- und ComboBoxes, mit Edits aber schon

Die Gründe hierfür liegen darin, dass von Profan2Cpp-Anwendungen ein MultiThread-Konzept benutzen, DLLs aber nicht und ich für MoveListToHandle() keinen Thread-Test eingebaut habe.

Das ganze gilt auch für ein paar weitere Dinge. Im Einelfall: Einfach ausprobieren und mich ggf. um Anpassung bitten.

Falls Du meinst, dass Du in XProfan die Liste füllst und dann in der DLL damit arbeiten möchtest: Das geht natürlich nicht - mit keiner DLL, denn die weiß ja nichts von XProfans interner Liste... EDIT: Ok, Du meinst wohl genau das - ich war etwas zu schnell mit der obigen Antwort, aber vielleicht ist das trotzdem interessant.

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
11.03.2009  
 



Hmmm..., wie wird eine Bereichsvariable b# übergeben an die DLL, wo die grösse wechselt?
Soll eien Dll werden.

Übergabe wert&,b#,c# und Return z&.
KompilierenMarkierenSeparieren
proc pixelausgabe

    whileloop 0,wert&-8,8

        z&=0
        z1&=byte(c#,&loop)

        if z1& < 3

            z1&=byte(b#,&loop)
            z2&=byte(b#,&loop+1)
            z3&=byte(b#,&loop+2)

            if (z1& > 250) or (z2& > 250) or (z3& > 250)

                z&=255
                break

            endif

        ENDIF

    endwhile

endproc


mfg.
 
12.03.2009  
 




Sebastian
König
Peter Bierbachh
Hmmm..., wie wird eine Bereichsvariable b# übergeben an die DLL, wo die grösse wechselt?


Die DLL-Funktion muss für jede Bereichsvariable wissen, wie groß sie ist. D.h. die Größen müssen als Parameter übergeben werden. Beispiel:
KompilierenMarkierenSeparieren
dllproc Test,4

    parameters b#,size_b&,c#,size_c&
    declare z&
    ...
    return z&

endproc


Wenn mehrere Bereiche die gleiche Größe haben, kann man sich natürlich überflüssige Parameter ersparen...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
12.03.2009  
 



Irgend etwas stimmt hier nicht.

Wenn ich in der DLL erst wieder neu dimensionieren muss....diese Bereichsvariablen.
Es beisst sich was...

Kann nicht stimmen...oder...

Wird wahrscheinlich für den Programmablauf doch zeitaufwendiger, wenn ich in der DLL wieder mit den zuweisungen bei Null anfangen muss.

mfg
 
12.03.2009  
 




Sebastian
König
Ich habe den Thread gerade unter dem neuen Namen wiedergefunden...

Peter Bierbachh
Irgend etwas stimmt hier nicht.

Wenn ich in der DLL erst wieder neu dimensionieren muss....diese Bereichsvariablen.
Es beisst sich was...

Kann nicht stimmen...oder...

Wird wahrscheinlich für den Programmablauf doch zeitaufwendiger, wenn ich in der DLL wieder mit den zuweisungen bei Null anfangen muss.

Also da hast Du irgendwas falsch verstanden... es ist nicht nötig, den Bereich in der DLL neu zu dimensionieren. Es geht nur darum, dass Du einer exportierten Prozedur, die Bereiche als Parameter erwartet, mitteilen musst, wie groß diese im aufrufenden Code dimensioniert wurden.

Das ist völlig analog zu der Arbeit mit API-Funktionen wie zum Beispiel ZeroMemory(). Da übergibt man ja auch einen Bereich (i.e. Zeiger) und die zugehörige Größe...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
12.03.2009  
 



Ach sooooo,....hatte ich jetzt falsch verstanden vom Beispiel. Wäre ja auch sonst paradox.

mfg
 
12.03.2009  
 




Zum Buch


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

20.268 Betrachtungen

Unbenanntvor 0 min.
Walter14.05.2023
Sven Bader04.08.2021
maxilars22.11.2018
Erfurt20.09.2017
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