Seite 3 von 4

Re: DLL richtig verwenden?

Verfasst: 08.03.2010 16:52
von Macros
Da drängt sich mir gerade die Frage auf:
Wie verwendet man eine DLL am saubersten?
In der PB Hilfe gibt ja gleich 3 Wege:
  • Callfunction (nicht sauber)
  • Import
  • Prototypes
Was sind die Vor und Nachteile?
Bei Prototypes schon mal, dass die Autovervollständigung nicht mitspielt.

Re: DLL richtig verwenden?

Verfasst: 08.03.2010 17:11
von ts-soft
Macros hat geschrieben:Da drängt sich mir gerade die Frage auf:
Wie verwendet man eine DLL am saubersten?
In der PB Hilfe gibt ja gleich 3 Wege:
  • Callfunction (nicht sauber)
  • Import
  • Prototypes
Was sind die Vor und Nachteile?
Bei Prototypes schon mal, dass die Autovervollständigung nicht mitspielt.
CallFunction fällt schon mal weg, das ist nicht Typensicher, der Compiler kann weder
die Anzahl der erforderlichen Parameter noch ihren Typ bestimmen!

Wenn eine DLL unbedingt für das Programm erforderlich ist, bietet es sich an den
Import zu nutzen. Dies entspricht einer frühen Bindung. Nachteil:
wird die DLL nicht gefunden, kann man den Fehler nicht auffangen, da er von
Windows behandelt wird (DLL fehlt, Neuinstallation sollte helfen oder so ähnlich).

Mit Polib (im PB-Compilers Verzeichnis) kann man sich recht einfach eine passende Lib
erzeugen, falls nicht vorhanden.

Mit OpenLibrary und Prototypes bietet sich an, wenn die DLL dynamisch, (späte Bindung)
geladen werden soll. Wenn eine DLL nicht unbedingt erforderlich ist, bzw. nur auf
bestimmten OS usw. bietet sich dies an. Das Programm kann selber auf nichtvorhandene
DLL reagieren. Sicherheitsrisiko ist größer da DLL Injection einfacher.

Importzeilen sind auch eine Art Prototype! Import ist die schnellste Möglichkeit.
OpenLibrary also nur nutzen, wenn man eines der Vorteile benötigt oder man es nicht
schafft, sich eine fehlende ImportLib zu erzeugen.

Gruß
Thomas

Re: DLL richtig verwenden?

Verfasst: 08.03.2010 17:32
von Macros
Danke, das hat mir schon mal weiter geholfen, aber ein paar Fragen bleiben noch:
Was genau sind, und wie funktionieren ImportLibs ? Damit hab ich mich noch nicht beschäftigt
und auch die Hilfe schweigt sich aus.
Gerade bin ich unter Linux, dort gibt es eine pbsoimporter ausführbare Datei, ich nehme mal an, das ist das Gegenstück zu polib?
Sonst reicht mir auch eine Beschreibung für Windows, muss ich halt kurz wechseln.

Darf ich den Rest so zusammnefassen?
Wenn Sicherheit nicht wichtig ist, ist es kein Fehler standardmäßig auf Prototypes zu setzen,
da sie Import sehr ähneln, aber eine eigene Fehlerbehandlung ermöglichen.
Wenn ich eine definierte Umgebung habe, und auf Sicherheit achten muss, verwende ich Import.

Re: DLL richtig verwenden?

Verfasst: 08.03.2010 18:22
von ts-soft
Der pbsoimporter erzeugt importlibs, ähnlich den UserLibs, dies ist eine weitere
Möglichkeit, die man eher nicht nutzen sollte, hat ähnliche Nachteile wie CallFunction...
und Code ist ohne diese erzeuge Lib woanders nicht nutzbar.

Welches Tool Linux zur Erstellung von statischen Libs nutzt weiß ich gerade nicht,
aber Polib gibts dort nicht, entsprechendes Tools unter Linux ist aber vorhanden,
aber nicht im PB Compilers Dir.

Jetzt mal 3 ganz einfache Beispiele, die aber die Vorteile nicht unbedingt erkennen
lassen, da ich z.B. keine Pseudotypes verwende.

Code: Alles auswählen

; Beispiel 1, herkömmlich, nicht empfohlen
If OpenLibrary(0, "user32.dll")
  CallFunction(0, "MessageBoxA", 0, @"Text", @"Titel", #MB_OK)
  CloseLibrary(0)
EndIf

; Beispiel 2, mit Prototypes
Prototype MessageBox(hWnd, Text.s, Titel.s, Flag = #MB_OK)
If OpenLibrary(0, "user32.dll")
  MessageBox.MessageBox = GetFunction(0, "MessageBoxA")
  MessageBox(0, "Text", "Titel")
  CloseLibrary(0)
EndIf

; Beispiel 3, mit Import
Import "user32.lib"
  MessageBoxA(hWnd, Text.s, Titel.s, Flag = #MB_OK)
EndImport
MessageBoxA(0, "Text", "Titel")


Re: DLL richtig verwenden?

Verfasst: 09.03.2010 11:53
von Rings
@The_Dark_Zim:
geht es jetzt bei dir ?

Re: DLL richtig verwenden?

Verfasst: 09.03.2010 15:37
von Deluxe0321
Mal so nebenbei eingestreut:
Wenn ich nun Import verwende, wie kann ich die dll z.b in einem anderen Verzeichnis liegen lassen?
Also in dieser Art:
Ordner\Programm.exe <-- Programm
Ordner\dll\meinedll.dll <-- Dll für Import

Grüße

Re: DLL richtig verwenden?

Verfasst: 09.03.2010 15:57
von ts-soft
Deluxe0321 hat geschrieben:Mal so nebenbei eingestreut:
Wenn ich nun Import verwende, wie kann ich die dll z.b in einem anderen Verzeichnis liegen lassen?
Also in dieser Art:
Ordner\Programm.exe <-- Programm
Ordner\dll\meinedll.dll <-- Dll für Import

Grüße
DLL muß sich im Pfad (ProgramDir, Windows, System32 usw.) befinden!
Die einzige Möglichkeit wäre, den Pfad vor start des Programmes zu erweitern,
das sollte aber nicht so praktikabel sein :)

Re: DLL richtig verwenden?

Verfasst: 09.03.2010 16:03
von Deluxe0321
Danke für die Info.. naja.. dann weiter Prototype..
Grüße

Re: DLL richtig verwenden?

Verfasst: 17.03.2010 12:56
von The_Dark_Zim-.-
@ Rings
Danke schön :bounce:
Scheint soweit zu gehen, werde das nun in mein Programm einbinden und dann melde ich mich nochmal ;)

Re: DLL richtig verwenden?

Verfasst: 29.03.2010 00:16
von The_Dark_Zim-.-
Ich hab hier ein kleines Problem ..
Ich soll einen String übertragen aber PB sagt : "Bad parameter type, number expexted instead of string." :bluescreen:
Wie soll ich nun einen String übermitteln ?
Hab CallFunction benutzt.

Gruß Zim