AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++-Lib/Dll in Delphi einbinden

Ein Thema von glkgereon · begonnen am 12. Nov 2005 · letzter Beitrag vom 14. Nov 2005
 
tommie-lie
(Gast)

n/a Beiträge
 
#9

Re: C++-Lib/Dll in Delphi einbinden

  Alt 13. Nov 2005, 19:36
Zitat von Der_Unwissende:
Du hast eigentlich zwei Möglichkeiten, du schreibst die Klasse komplett in C++ nach (eher von abzuraten)
Dürfte auch unmöglich sein, wie gesagt, das ABI wird sich unterscheiden. Vielleicht nicht zwischen den beiden Borland-Compilern, aber mit Sicherheit zwischen einem anderen C++-Compiler.

Zitat von Der_Unwissende:
Wäre jetzt zumindest für C (ohne ++) das was mir als direkte Entsprechung einfällt. Hab aber nie wirklich genug mit C/C++ gemacht um bessere Alternativen ausschließen zu können.
Es gibt auch für C++ keine Alternativen, außer Interfaces mit 'nem entsprechenden Objektsystem dazwischen (COM. CORBA, Weißdergeier).

Zitat von Der_Unwissende:
Jedenfalls müsstest du bei C (wieder ohne ++) unbedingt die Dimensionen von Arrays angeben. Sonst hast du ganz schnell das Problem, dass du nicht weißt wo das Array endet (gibt in C kein length).
Kommt drauf an. In C stehen dir String-Funktionen zur Verfügung, mit denen arbeitet es sich sehr schön, wenn die Strings alle nullterminiert sind. Listen von Strings werden oft als nullterminierte Liste von Strings übergeben, also jede Menge nullterminierte Strings, dann ist das letzte Zeichen ein NULL-Character, und wo als nächstes ein String kommen würde, einfach noch ein NULL-Character. Das letzte Element ist also ein Nullstring und markiert das Ende der Liste. Das Ganze funktioniert dann so, daß nur ein Pointer auf den allerersten String übergeben wird. Zu dessen Ende gelangt man mit Pointerarithmetik und der strlen()-Funktion, ein Zeichen weiter befindet sich das erste Zeichen des zweiten Strings. Das kann man wunderschön in einer Schleife in ein std::vector<std::string> einlesen, bis man als nächstes Zeichen nicht mehr den ersten Buchstaben des nächsten Strings erhält, sondern den NULL-Character.
Ein char **, was von dir angesprochen wurde, ist ja wieder was anderes. Aber auch hier könnte (und sollte) man das Ende des Strings als NULL kennzeichnen.

Zitat von Der_Unwissende:
Ok, nochmal, du kannst einfach kein Array of String ohne weiteres übergeben (denke ich), da ein String anders organisiert sein dürfte als ein PChar.
Ein array of String dürfte einem char ** entsprechen, vermute ich. Solange man die Daten nicht verändert, müsste es klappen, aber ganz sicher bin ich mir nicht.
Was ein array of array of Char angeht, bin ich mir im Augenblick auch unsicher, Delphi muss ja für die "Open Array Parameters" auch irgendwie die Länge nachverfolgen können. Es könnte aber ähnlich wie bei dynamischen Arrays keinen Unterschied machen, wenn man mit dem Pointer arbeitet, da bei dynamischen Arrays die Metainformationen ja vor dem Datenbereich liegen. Ich würde sagen, daß man am sichersten mit der oben von mir dargestellten Aneinanderkettung von Strings arbeitet, oder mit einem PPChar.
  Mit Zitat antworten Zitat
 


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 23:48 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