AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

C++ Dll in Delphi

Ein Thema von jst69 · begonnen am 19. Sep 2007 · letzter Beitrag vom 19. Sep 2007
Antwort Antwort
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#1

Re: C++ Dll in Delphi

  Alt 19. Sep 2007, 08:37
Du benutzt 2 unterschiedliche Aufrufkonvetionen. Deine Methode benutzt stdcall und die aus der DLL benutzt __cdecl. Das entspricht cdecl in Delphi.

Und dann solltest du in jedem Falle alle Parameter deklarieren. Egal ob die Werte davon benötigt werden oder nicht. Die Funktion erwartet immer alle Parameter egal ob DU sie verwendest oder nicht. Aber übergeben musst du sie. Für "leere" pchars einfach ein nil und für Zahlen eine 0 übergeben. Das sollte ausreichen.

Sollte also in etwa so aussehen.
Code:
TIBANProc = function(
  pszKonto: PChar;
  pszBCPC: PChar;
  pszIBAN: PChar;
  nIBANLen: Integer;
  pszBC: pChar;
  nBCLen: Integer;
  pszPC: pChar;
  nPCLen: Integer;
  pszBIC: pChar;
  nBICLen: Integer
): Integer; cdecl;
Das var ist bei pChars nicht nötig, wenn nicht sogar falsch, da ein pChar bereits den Pointer auf einen Text enthält. Wenn du jetzt noch var sagst, dann wird eigentlich sogar die Adresse der pChar Variable übergeben, da ja der Wert der Variable verändert werden darf.

Wenn du konstante Strings an eine Methode übergeben möchtest, dann kannst du das auch schon direkt machen. Delphi übergibt dann automatisch nur den Pointer. Bei pChars die als Rückgabewert dienen (kann man da nur vermuten) musst du dafür sorgen, dass der Platz in dem Pointer auch entsprechend groß ist. Da würde ich empfehlen. Entweder mit StrAlloc / StrDispose einen Text zu erzeugen oder bei einem String SetLength aufrufen und dann pChar(Text) an die Methode zu übergeben. Wenn die nämlich versuchen etwas in den Speicher zu schreiben und die Größe ist zu klein oder der Wert für die Länge ist zu groß, dann greifen die unweigerlich in fremden Speicher. Damit hast du dann einen sogenannten Bufferoverflow erzeugt. Was häßlich enden kann.

PS: a, b, c, d sind immer ganz schlechte Bezeichner.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz