Einzelnen Beitrag anzeigen

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