Es sind ein paar kleinere Fehler drin.
Zitat von
Andru:
Code:
eResult InitLibrary(const char* szLibPath,
eLogLevels logLevel,
bool bInternalCtx,
bool bInternalPTZ,
const char* szLanguage);
eResult ist ein 'enumeration type'. Ein Rückgabewert von -4 bis +1 kann zurückkommen.
Wird da in C++ mit Integer gearbeitet?
Code:
typedef enum eResult
{
failed = -4,
invalid = -3,
usw. ...
}
'eLogLevels' gehen von 0 bis 5.
Du solltest an den Anfang der
UNIT noch folgenden Compilerschalter setzen:
{$MINENUMSIZE 4}
Damit wird jedes Element aus deiner Enumeration 4 Byte groß.
Sollte gesetzt sein, da die
DLL aus der C/C++-Welt kommt.
"eLogLevels" solltest du als eigenen Typ deklarieren.
BOOL <> Boolean
BOOL ist 4 Byte groß, Boolean nur 1 Byte.
Wenn du als Variablendeklaration irgendwo BOOL findest, musst du unter Delphi auch BOOL nehmen.
Zitat von
Andru:
Das ganze hab ich dann so eingepflegt:
Delphi-Quellcode:
function InitLibrary(szLibPath: String; eLogLevels: Integer; bInternalCtxMenu: boolean;
bInternalPTZ: boolean; szLanguage: String): Integer; external 'PlayerLib.dll';
"char *Name" ist unter Delphi "Name: PChar".
Da für die
DLL keine Aufrufkonvention angegeben ist, gehe ich mal von "cdecl;" aus.
Delphi nutzt standardmäßig "stdcall;".
Delphi-Quellcode:
function InitLibrary(szLibPath: PChar; LogLevel: eLogLevels; bInternalCtxMenu: BOOL;
bInternalPTZ: BOOL; szLanguage: PChar): eResult; cdecl; external 'PlayerLib.dll';