Einzelnen Beitrag anzeigen

Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: C++ DLL in Delphi einbinden

  Alt 12. Feb 2007, 10:19
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';
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat