Thema: Delphi C++ Dll in Delphi

Einzelnen Beitrag anzeigen

jst69

Registriert seit: 19. Sep 2007
2 Beiträge
 
#1

C++ Dll in Delphi

  Alt 19. Sep 2007, 09:04
Hallo,

also ich habe ein Problem beim Einbinden einer DLL und habe schon verschiedenes ausprobiert. Nun brauche ich eure Hilfe. Die Variable c sollte mir das Resultat zurückgeben. Die DLL läuft durch und ich bekomme einen Rückgabewert, aber wenn ich die Variable c auslesen möchte, steht da immer noch der Initialwert und nicht das Resultat der Berechnung.

My Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
  {TIBANProc = function(d: integer; var c: PChar; b: PChar; a: PChar): integer; stdcall;}
  TIBANProc = function(a: PChar; b: PChar; var c: PChar; d: integer): integer; stdcall;

var
  hDLL: THandle; // Handle zur DLL
  iRes: integer; // Ergebnis der Funktion
  FarProc: TIBANProc;
  sDLLPath: PAnsiChar;
  a,b: pChar;
  c: pChar;
  d: integer;
begin
  sDLLPath := PChar(ExtractFilePath(Application.ExeName) + 'IBANKernel.dll');
  hDLL := LoadLibrary(sDLLPath);
  if hDLL = 0 then begin
    ShowMessage('DLL konnte nicht geladen werden.');
    Exit;
  end;

  try
    a := pChar('415811.00032');
    b := pChar('100');
    c := pChar('xy');
    d := 21;
    iRes := 0;
    @FarProc := GetProcAddress(hDLL, 'IT_IBANConvert');
    if Assigned(@FarProc) then
      iRes := FarProc(a,b,c,d);
    ShowMessage('Bingo-->'+a+'-->'+b+'-->'+c+'------->'+IntToStr(iRes));

    FreeLibrary(hDLL);
  except
    ShowMessage('Funktion der DLL konnte nicht ausgeführt werden.');
  end;
end;
Hier noch die H-Datei der DLL:
Code:
typedef int (__cdecl *IT_IBANConvert)     (char *pszKonto,
                                            char *pszBCPC,
                                            char *pszIBAN,
                                            int nIBANLen,
                                            char *pszBC,
                                            int nBCLen,
                                            char *pszPC,
                                            int nPCLen,
                                            char *pszBIC,
                                            int nBICLen);
Die ersten 4 Parameter sind zwingend, die anderen nicht. Was mache ich falsch?

[edit=SirThornberry]Delphi-Tags und C-Tags gesetzt - nächstes mal bitte selbst machen Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat