Die Übergabe von Zeichenketten von der DLL an das Anwenderprogramm ist immer durch die Übergabe eines Zeigers auf einen Speicherbereich und als weiteren Parameter einen Integer-Wert für dessen Länge (in Zeichen) definiert. Es werden grundsätzlich nur so viele Zeichen kopiert, dass es keinen Überlauf in diesem Bereich gibt, die Zeichenketten sind immer ´\0´-terminiert. Bei Bedarf (wenn der Puffer zu klein ist) wird der übergebene String also gekürzt und unvollständig zurückgegeben. Achten Sie auf den Fehlercode LL_ERR_BUFFERTOOSMALL.
Die Parameter werden soweit möglich, auf Korrektheit überprüft. Während der Programmentwicklung lohnt es sich also, den Debug-Modus einzuschalten (siehe LlSetDebug()) und die Rückgabewerte zu überprüfen. Später können Sie dann die Parameterüberprüfung explizit ausschalten (LL_OPTION_NOPARAMETERCHECK).
Bei Delphi ist zu beachten, dass die Routinen null-terminierte Zeichenketten benötigen und zurückgeben, wie es bei Windows-Funktionen üblich ist. Im Bedarfsfall müssen die Pascal-String zu C-String Konvertierungsroutinen benutzt werden.
Bei Visual Basic sollte beim DLL-Zugriff das '\0' Zeichen zur Weiterverarbeitung entfernt werden (normalerweise beim OCX nicht nötig). Parameter werden überall ByVal übergeben. Es empfiehlt sich, Zeichenketten/Puffer vor Gebrauch durch
Dim lpszBuffer As String * 255
auf eine gewisse Größe (hier 255 Bytes) zu initialisieren. Dies ist auch durch eine Zuweisung wie
lpszBuffer$ = space$(255)
möglich, die aber mehr Zeit und Code benötigt. Wichtig ist nur, dass der Platz reserviert wird, so dass die DLL nicht in unbenutzte Bereiche schreibt, ansonsten wäre ein GPF die Folge.
Ansonsten ist zu Visual Basic für die Verwendung der DLL-Schnittstelle anzumerken, dass manche Funktionen prinzipiell nicht unterstützt werden können; im Normalfall werden diese aber auch nicht benötigt. Sofern in diesem Handbuch als Übergabewert NULL oder nil verwendet wird, sollte (je nach Datentyp) in Visual Basic "" (Leerstring) oder 0 übergeben werden.
Bei C oder C++ muss die C-Konvention beachtet werden, so dass Sie in Quelltexten für '\', z. B. in Pfadangaben, dieses doppelt eingeben müssen: "c:\\temp.lbl" statt "c:\temp.lbl".
Beispiel:
INT nSize = 16000;
LPWSTR pszBuffer = new TCHAR[nSize];
INT nResult = <API>(hJob,...,pszBuffer,nSize);
if (nResult == LL_ERR_BUFFERTOOSMALL)
{
nSize = <API>(hJob,...,NULL,0);
ASSERT(nSize > 0);
delete[] pszBuffer;
pszBuffer = new TCHAR[nSize];
nResult = <API>(hJob,...,pszBuffer,nSize);
}
...
delete[] pszBuffer;