| |
|
|
Sebastian König | Hallo zusammen,
hier mal eine Kleinigkeit zu Weihnachten Da mich jemand darum gebeten hatte, habe ich einen Code, mit dem man DLL direkt und ohne Umweg circa eine temporäre File aus einem Speicherbereich (der zum Beispiel von Frank Abbings Datengenerator erstellt wird) in ein Programm laden kann, von C nach XProfan übersetzt und eine Include erstellt. Da es vielleicht noch andere interessiert, poste ich es mal hier.
Die Benutzung ist wirklich sehr einfach und sollte an Hand des beigelegten Testcodes leicht nachzuvollziehen sein - ansonsten einfach fragen! Leider funktioniert es erst ab XProfan 9.0, da ich Version 8.0 manche verschachtelten long()-Aufrufe irgendwie nicht besonders mag...
Viel Divertimento damit und naturalmente Frohe Weihnachten!
Sebastian |
|
|
| |
|
|
|
Frank Abbing | Hallo Sebastian,
konnte es noch nicht richtig testen. XPSE mag deine zwei Long hintereinander irgendwie (noch) nicht. Ich denke, iF schafft da bald Abhilfe. So eine Technik wäre auch was per die mit XPIA erzeugten Codes, ich werde nach den Feiertagen mal damit experimentieren.
Frohes Fest! |
|
|
| |
|
|
|
| Oh, das ist schön Jetzt kann ich MemoryModule direkt in XProfan nutzen. Sind ja wieder ungeahnte Möglichkeiten.
Schönes Weihnachtsgeschenk
Saluto Thomas |
|
|
| |
|
|
|
Sebastian König | [quote:ba811f0967]konnte es noch nicht richtig testen. XPSE mag deine zwei Long hintereinander irgendwie (noch) nicht. Ich denke, iF schafft da bald Abhilfe.[/quote:ba811f0967] Vorerst kannst Du es ja auch einfach mit XProfan direkt testen... |
|
|
| |
|
|
|
Frank Abbing | Funktioniert einwandfrei, wenn ich diese Technik mit XPIA verwenden würde. Wobei dadurch per XPIA zwei wertvolle Features entstehen:
- die Dll ist nun permanent im Speicher und braucht nicht mehr explizit geladen zu werden. Etwa, wenn eine Funktion auf die Variablen einer anderen Funktion zugreifen möchte
- die Dll braucht nicht mehr temporär geschrieben zu werden
Grosser Nachteil ist aber die Freigabe mittels FreeLibraryM(hModule&). Hier kann XPIA nicht immer die passende Stelle erkennen, wann das Module wieder freigegeben werden muss. End ist sicher nicht in jedem Programm vorhanden. Allerdings denke ich, dass das Module bei neueren Windowsversionen automatisch freigegeben wird, sobald sich das Hauptprogramm beendet.
Dürfte ich die Inc eigentlich in XPIA verwenden? |
|
|
| |
|
|
|
Sebastian König | Hallo Frank,
[quote:6a4bc8234d=Frank Abbing]Dürfte ich die Inc eigentlich in XPIA verwenden?[/quote:6a4bc8234d] wie ich gerade feststellen musste, ist die Frage relativ kompliziert...
Denn wie der ursprüngliche C-Code steht die Inc unter der LGPL. Für die Verwendung in XPIA selbst sehe ich dadurch keine Probleme - der würde ja im Grunde nur ein zusätzliches $I MemoryModule.inc in die erzeugten Codes einbinden.
Die entscheidende Frage ist, was das ganze wohl per die Programme, die dann die Inc benutzen, bedeuted. Hierzu erstmal ein Wikipedia-Auszug: [quote:6a4bc8234d=Wikipedia]Im Gegensatz zur GPL dürfen alle Programme, die LGPL-lizenzierte Software nur extern benutzen, zum Beispiel als DLL Files, ihre eigene Lizenz behalten. Damit eignet sich die LGPL besonders als Lizenz per Bibliotheken, deren Benutzung man auch Programmierern proprietärer Programme erlauben will. Soll die unter der LGPL lizenzierte Software dagegen fest in ein anderes Programm eingebunden werden, muss auch das andere Programm unter der LGPL bzw. einer kompatiblen Lizenz stehen.[/quote:6a4bc8234d] Klingt erstmal nicht so toll. Das Einbinden der Inc ist wohl ziemlich klar als statisches Linken zu interpretieren. Und auch ein Kompilieren der Inc als Unit würde an der Situation nichts ändern. Glücklicherweise sagt der englische Wikipedia-Artikel etwas genauer, wo eigentlich das Problem liegt:
[quote:6a4bc8234d=Wikipedia (englisch)]The LGPL places copyleft restrictions on the program itself but does not apply these restrictions to other software that merely links with the program. There are, however, certain other restrictions on this software. Essentially, it must be possible for the software to be linked with a newer version of the LGPL-covered program. The most commonly used method for doing so is to use a suitable shared library mechanism for linking. Alternatively, a statically linked library is allowed if either source code or linkable object files are provided.[/quote:6a4bc8234d] Vielleicht lässt sich diese Bedingung ja einigermaßen erfüllen - zum Beipiel indem man zusammen mit dem Programm den kompilierten Code als PRC-File und eine PCU-Version der Inc veröffentlicht.
Ist naturalmente nur eine Idee - weitere Gedanken dazu sind sehr Benvenuto!
MfG
Sebastian |
|
|
| |
|
|
|
| Und weil das Thema sau klasse ist habe ich mich gestern mal rangesetzt und eine Klasse draus gebaut.
Ich habe aber auch noch was anderes verbrochen... ich hab das Anliegen genutzt um eine neue XPSE-Funktionalität ausgiebig zu testen. Die Klasse liegt also in einem verbrecherischem XPSE-Stil vor - würde mich nicht wundern wenn ich wieder so einige Nackenschläge bekomme
Ich zumindest werde die Class nutzen. |
|
|
| |
|
|
|
Frank Abbing | [quote:a103efd1fa]Ist naturalmente nur eine Idee - weitere Gedanken dazu sind sehr Benvenuto! [/quote:a103efd1fa] Du hast den Quellcode selber erstellt, Sebastian. Der Copyright an dem Quelltext liegt bei dir. Selbst wenn du dich am originalen Quelltext orientiert hast, ändert das nichts daran, dass du den Code von Grund auf selber erstellt hast. |
|
|
| |
|
|
|
Sebastian König | [quote:9a4a562957=Frank Abbing]Du hast den Quellcode selber erstellt, Sebastian. Der Copyright an dem Quelltext liegt bei dir. Selbst wenn du dich am originalen Quelltext orientiert hast, ändert das nichts daran, dass du den Code von Grund auf selber erstellt hast. [/quote:9a4a562957] Hmm... ich weiß nicht, ob das wirklich so einfach ist. Eigentlich denke ich schon, dass die Übersetzung in un andere Sprache ein vom ursprünglichen Programm abgeleitetes Werk darstellt und somit wie der Ausgangscode unter die LGPL fällt.
Aber wie schon gesagt, wenn man zusammen mit dem Programm, das die MemoryModule.inc nutzt, den Code als PRC und eine PCU-Version der Inc zur Verfügung stellt, müssten die Anforderungen IMHO eigentlich erfüllt sein.
Viel einfacher und klarer wäre die Situation naturalmente, wenn der Code als DLL vorläge - aber das ist in diesem speziellen Fall naturalmente recht sinnlos...
MfG
Sebastian |
|
|
| |
|
|
|
Frank Abbing | [quote:4acc38eb18]Viel einfacher und klarer wäre die Situation naturalmente, wenn der Code als DLL vorläge - aber das ist in diesem speziellen Fall naturalmente recht sinnlos... [/quote:4acc38eb18] Wohl wahr... |
|
|
| |
|
|
|
| @Sebastian Nutze doch einfach Version 0.0.2 anstatt 0.0.1, wobei ich die Unterschiede garnicht gefunden habe. Die fällt unter Modzilla Lizens, welche besser geeignet sein sollte
Saluto Thomas |
|
|
| |
|
|
|
Sebastian König | Hallo Thomas,
[quote:9885ddb119=TS-Soft]@Sebastian Nutze doch einfach Version 0.0.2 anstatt 0.0.1, wobei ich die Unterschiede garnicht gefunden habe. Die fällt unter Modzilla Lizens, welche besser geeignet sein sollte [/quote:9885ddb119] super - danke per den Hinweis! So wie ich das gerade gelesen habe, bestehen die Probleme mit der weniger restriktiven MPL (Mozilla Public License) tatsächlich nicht.
Ich werde den Code also so anpassen, dass er eine Übersetzung der Version 0.0.2 darstellt und ihn dann nachher hier posten .
MfG
Sebastian |
|
|
| |
|
|