Der Hauptgrund "string" wurde ja bereits genannt.
"String" ist ein Delphi-Typ
und hat nichts mit den C-Strings zu tun.
Außerdem hat "String" oder "PChar" niemals etwas in APIs zu suchen.
Denn das sind
dynamische Typen und Schnittstellen sind immer
statisch/unveränderlich. (sollten es sein, oder jemand hat geschlafen)
Denn z.B. seit Delphi 2009 sind String/PChar
Unicode/Wide und davor waren sie
ANSI.
Also in deinem Fall ist es PAnsiChar.
Und wenn du schon dabei bist dir die Grundlagen anzueignen, dann bitte auch das Thema Fehlerbehandlung nicht vernachlässigen.
Delphi-Quellcode:
hmod := LoadLibrary('QMC_DLL.dll');
if (hmod <> 0) then begin
end
else
ShowMessage('LoadLibrary Failed!');
Es ist schonmal nicht schlecht überhaupt erstmal Fehler zu behandeln,
aber es ist nicht "klug", wenn man den eigentlichen Fehler fahrlässig vernichtet.
Denn warum ist das nun fehlgeschlagen?
Diese APIs geben auch den Grund des Fehlers an. (natürlich nur, wenn es einen Fehler gab)
LoadLibrary siehe "Return Value"
GetLastError
RaiseLastOSError
Delphi-Quellcode:
else
ShowMessage('LoadLibrary Failed!' + sLineBreak + ' FehlerCode: ' + IntToStr(GetLastError);
Delphi-Quellcode:
else
ShowMessage('LoadLibrary Failed!' + sLineBreak + SysErrorMessage(GetLastError));
Falls zwischen der
API (z.B. LoadLibrary) und dem GetLastError eine
WinAPI aufgerufen werden könnte, dann GetLastError so schnell wie möglich auslesen und zwischenspeichern.
z.B. könnte beim Zusammenbau der davorliegenden Strings Speicher resserviert werden, was ein paar
WinAPI-Aufrufe zur Folge hätte.
Delphi-Quellcode:
else
begin
ErrorCode := GetLastError;
ShowMessage('LoadLibrary Failed!' + sLineBreak + SysErrorMessage(ErrorCode));
end;
Hier geht es aber zufällig, da vorher nur String-Konstanten liegen und somit IntToStr/SysErrorMessage und GetLastError die ersten Funktionsaufrufe sind.
Für den Entwickler ist es eventuell gibt auch die Fehlerstelle oder den Dateinamen mit auszugeben.
Wenn mal jemand diese Fehlermeldung sieht, dann weißt du gleich wo der Fehler zu suchen ist.