Was haltet ihr von Dlls?
Übersicht

![]() |
Lord StweccysBetreff: Was haltet ihr von Dlls? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja es ist eine simple Frage, aber für mein jetziges Projekt möchte ich gerne von euch wissen:
Was haltet ihr von DLLs ![]() Nennt mir Vor- und Nachteile, sagt, was euch an ihnen stört und was ihr gut findet. Danke schon mal, Mfg, LordSt |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine Ahnung, wie man von DLLs was halten soll, aber deine Vorteile/Nachteile findest du auf Wikipedia:
http://de.wikipedia.org/wiki/Dynamic_Link_Library |
||
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
So schlau war ich auch schon, bei Wikipedia nach zu schauen. Ich wollte eigentlich wissen, ob ihr persönlich noch
irgendwelche Gründe für oder gegen DLLs kennt. (Hoffe das hier wird noch was ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie soll man das ohne kontext sagen können? Da es keine Alternative zur DLL, bzw. ihrer entsprechung des jeweiligen OS, gibt, kann man von den Dingern halten, was man will, sie sind nunmal das einzig zur verfügung stehende mittel, um Code dynamisch zu linken. | ||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich nehm mal an, es geht dir um Funktionalitäten die Blitz nicht zur Verfügung stellt und die du mit DLLs mitliefern willst? (Da du keine Diskussionsgrundlage explizit nennst, nehm ich mal BB an, ist doch naheliegend ![]() Ich bin ja dafür, so viel wie möglich intern zu machen. Also auch wenn eine DLL zB schnelleren Pixel-Zugriff bietet, würde ich trotzdem bei ReadPixelFast usw. bleiben. Und wenn es um die WinAPI geht dann würde ich mich sehr freuen, wenn du sie direkt nutzt, statt irgendwelche "Wrapper" zu benutzen, die sind (oft, nicht immer) ein ziemlich sinnloser Umweg. Aber ja, es gibt Dinge die kann nur ne DLL liefern und dann... ja dann gib sie halt mit, was bleibt uns übrig? ^^ Was ich halt weniger mag sind so Projekte wo jemand glaubt er ist cool weil er möglichst viele DLLs benutzt um so Dinge wie Autostart-Eintrag oder SysTray-Icon zu bringen damit das Zeug "professionell" wird. EDIT: Und wenn man DLLs mitgibt, dann bitte im Programmordner... NICHT in den System32-Ordner kopieren, da müllen sie doch nur das System zu weil die DLL von dort wahrscheinlich nie wieder raus kommt. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich arbeite grade an einer Alternative zu DLLs, deshalb habe ich ja auch diesen Thread eröffnet um das,
was "die Bevölkerung" an ihnen nervt in meiner Ausführung zu verbessern. Ich plane, dass man diese Alternativ-DLLs auch in BlitzMax schreibt, allerdings werden die dann auf (theoretisch) allen Platformen funktionieren ohne, dass sie nochmals ausgerechnet für diese OS kompiliert werden. Zusätzlich werden diese Module noch unverschämt klein (Mein Test-Modul, welches zwei Zahlen addiert ist grade mal 13 Bytes groß) Ich hab schon ein paar kleinere Tests durchgeführt und bis jetzt klappt alles, doch bevor ich dieses Projekt so richtig angehen wollte, wollte ich halt mal wissen, was man so an Features umsetzen kann und was sich dann auch von stinknormalen DLLs abhebt Edit: Ich rede von BlitzMax (sorry, das ich es vergessen habe zu erwähnen) |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, ich denke mal, dein Code wird dann nicht nativ ausgeführt werden, sondern eher in eine richtung script-sprache gehen? Das wäre für viele Anwendungs-Fälle viel zu langsam.
Ansonsten wüsste ich nicht, wie du den Platform-Spezifischen Code für alle OS in ein objekt unterbringen willst. Wenn das gehen würde, wäre es eine sehr interessante Sache. |
||
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch, das ist es ja, das ganze arbeitet nativ und ist damit sogar verflucht schnell ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie genau stellst du das an, dass z.B. os-spezifische sachen, wie Beispielsweise Netzwerk-Zugriff u.Ä. ohne neu kompilieren überall laufen? | ||
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja das wird dann natürlich die Hürde werden. ![]() die Grundmuster und so werden auf jeden Fall ohne irgendwelche Libs laufen und Netzwerksgesums ist dann halt OS-spezifisch, da kann man nichts machen ![]() Aber dafür ist ja meine Lib auch gar nicht in erster Linie gedacht, sie ist eher für modulares, (platformunabhängiges) Programmieren, das so schnell ist wie hardcoded, dafür aber deutlich flexibler. |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst du mal ein paar Details nennen wie du das erreichst? Würd mich sehr interessieren... | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, ihr wisst doch alle, dass BlitzMax in Assembler konvertiert wird und ich habe mich in den
letzten Tagen stark mit Assembler und BlitzMax beschäftigt und diese alte Idee, von der ich schon mal Thunder erzählt hab, wieder aufgegriffen: Zuerst schreibt man in Assembler eine kleine Funktion, z.B. Code: [AUSKLAPPEN] use32
_Funktion: mov eax,42 ret Das ganze kann man einfach in eine .bin-Datei kompilieren. Diese Datei kann man mit MemAlloc() in den Speicher laden und die Adresse auf einen Funktionspointer ziehen. Voila! Ruft man die Funktion auf, ruft man den eingeschleusten Code auf. Das ist die Grundidee. |
||
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich finde die riechen komisch | ||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
@biggicekey: Stimmt, das ist auch ein gutes Argument ![]() |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das was du, glaube ich, übersiehst ist, dass man shared libs, nicht wegen inkompatiblen Assemblercode sondern wegen inkompatiblen Dateiformaten neukompiliert werden müssen.
Außerdem sind DLLs eben shared libraries, d.h. sie können von mehreren Programmen verwendet werden, ohne mehrfach geladen sein zu müssen. Wenn du es trotzdem ausprobieren willst (ich spreche nicht gegen so ein Projekt, weil ich zumindest sehr viel Spaß daran habe, etwas in BlitzMax rumzuhacken) musst du beachten, dass du eine Symboltable brauchst und eine Funktion die, die Funktionszeiger aus BlitzMax auf die FakeDLL-Funktionen umleiten. Ein Problem könntest du noch haben: Far-Pointer brauchen die Offsetadresse an die, die FakeDLL geladen wurde. Die weiß die FakeDLL nicht. Windows macht das so, dass die DLL an ein Standardoffset gebunden wird (Assemblerbefehl org). Wenn sie nicht an das Offset geladen werden kann, wird die ganze DLL relocated (so einen Relocator schreiben kann ganz schön schwer werden). |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da habe ich mir natürlich auch schon Gedanken gemacht ![]() Die Symboltabelle existiert in meinem Kopf schon d.h., ich habe schon eine genaue Idee des Aufbaus meines Formats. Das mit dem Offset war ein Problem, das theoretisch schon behoben ist, weil ich eine Idee für einen Algo hab, der automatisch Pointer im Code entdeckt und sie mit dem Offset des Moduls addiert. Was ist ein Relocator? |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich finde sie nicht gut, weil ich nicht weiß, wie man sie schreibt ![]() Hab schon etliche tuts durchgemacht, verstehe es aber trotzdem nicht ![]() |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versuche es bei meiner Version so einfach, wie möglich zu halten.
Habe mir das so vorgestellt, dass man einfach Funktionen definiert und in dem Hauptprogramm dann eine Funktion aufruft, die den Code filtert, kompiliert und dann zu einer Bibliothek zusammenfasst. Nun ja, das ganze ist noch Theorie, werde heute aber mal mit dem Programmieren beginnen und wenn es erste Berichte gibt, kann ich vielleicht auch einen Worklog eröffnen. Mfg, LordSt |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stichwort DLL HELL ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du willst also praktisch code manuell in den speicher laden und dann per Funktionspointer ausführen?
Mich juckts grade das in C++ irgendwie zu versuchen :/ |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group