| chtwain | chhook |
| chlogfile | chfilesearch |
| chfile | chregaus |
Grundsätzlich ist die Nutzung der DLL's für private Zwecke frei. Für eine kommerzielle Nutzung ist vorab das Einverständnis des Autors einzuholen.
Alle DLL's enthalten die *.dll Datei, die *.lib Datei und die *.h Datei. Somit sollten die DLL's ohne Probleme in ein Projekt eingebunden werden können.
Die DLL's wurden auf einem PIII mit 512 MB RAM und unter Windows XP
entwickelt.
Inwieweit die Programme auf anderen Plattformen (insbesondere
Windows NT, Windows 2000 usw.) ablauffähig sind, ist nicht bekannt.
Wer eine DLL mit dem DLL Experten erstellt bekommt zu allererst einen großen Kommentar im Quellcode angezeigt:
//--------------------------------------------------------------------------- // Wichtiger Hinweis zur DLL-Speicherverwaltung, falls die DLL die statische // Version der Laufzeitbibliothek (RTL) verwendet: // // Wenn die DLL Funktionen exportiert, die String-Objekte (oder Strukturen/ // Klassen, die verschachtelte Strings enthalten) als Parameter oder Funktionsergebnisse übergibt, // muß die Bibliothek MEMMGR.LIB im DLL-Projekt und anderen Projekten, // die die DLL verwenden, vorhanden sein. Sie benötigen MEMMGR.LIB auch dann, // wenn andere Projekte, die die DLL verwenden, new- oder delete-Operationen // auf Klassen anwenden, die nicht von TObject abgeleitet sind und die aus der DLL exportiert // werden. Durch das Hinzufügen von MEMMGR.LIB wird die DLL und deren aufrufende EXEs // angewiesen, BORLNDMM.DLL als Speicherverwaltung zu benutzen. In diesem Fall // sollte die Datei BORLNDMM.DLL zusammen mit der DLL weitergegeben werden. // // Um die Verwendung von BORLNDMM.DLL, zu vermeiden, sollten String-Informationen als "char *" oder // ShortString-Parameter weitergegeben werden. // // Falls die DLL die dynamische Version der RTL verwendet, müssen Sie // MEMMGR.LIB nicht explizit angeben. //---------------------------------------------------------------------------
Das bedeutet schlicht und einfach, dass man String (AnsiString) nur als Übergabeparamter oder als Rückgabeparameter benutzen kann, wenn sowohl die DLL als auch das aufrufende Programm die MEMMGR.LIB einbinden. Ausgenommern die DLL wird dynamsich erstellt. Das hat jetzt nichts damit zu tun, wie die DLL eingebunden wird ob statisch oder dynamisch, sondern wie die DLL selbst erstellt wird. Ob sie also statisch oder dynamisch gelinkt wird.
Allerdings ist es auch ganz einfach auf String (AnsiString) als Über- oder Rückgabeparameter zu verzichten. Es datf ja die Klasse nur nicht als Über- oder Rückgabeparameter genutzt werden, innerhalb der DLL ist das kein Problem.
Ersatz als Rückgabeparamter:
char *func()
{
String rueckgabe="Hallo";
return rueckgabe.c_str();
}
//*****************
String aufruf=func();
Da ein char-Zeiger durch die Klasse String automatisch gewandelt wird. ergibt sich hier kein großer Nachteil. Nur die Rückgabe ist mit der Methode c_str() zu machen.
Ersatz als Aufrufparamter:
void func(char *value)
{
String weiterarbeit=value;
....
}
//*****************
String aufruf="übergabe";
func(aufruf.c_str());
Auch hier wird wieder die Übergabe mittels c_str() vorgenommen. Da man ja innerhalber der DLL wieder mit String arbeiten will, wird der Übergabeparamter einfach wieder einem String zugeweisen.
Folgende Probleme sind mir bekannt:
Es wurde größtmögliche Sorgfalt auf die Brauchbarkeit der DLL's verwandt. Jede ausdrückliche oder stillschweigende Haftung wird ausgeschlossen, einschließlich Haftung bezüglich des wirtschaftlichen Nutzen oder Eignung zu einem bestimmten Zweck. Verantwortung für jeden direkten, indirekten, nachfolgenden oder begleitenden Schaden (einschl. des Schadens durch entgangenen Gewinn, Unterbrechung von Geschäftsvorgängen, Verlust von geschäftlichen Informationen und ähnliches), der aus dem Gebrauch oder der Unmöglichkeit der Programme resultieren, wird nicht übernommen.