C++-DLL mit Stringfunktionen

Hallo zusammen!
Ich habe mit C++ ein paar Klassen zur Datenkompression geschrieben und die funktionieren richtig gut. Allerdings möchte ich die jetzt auch in Delphi oder Visual Basic nutzen. Dazu würde ich die Klassen in eine DLL packen und die entsprechenden Funktionen exportieren. An sich simpel. Kopfzerbrechen machen mir allerdings die Datentypen für die Strings. C++ und Delphi arbeiten da ja nicht wirklich Hand ind Hand. Mein erster Versuch ist gescheitert. Wie muss ich die Strings anlegen, damit ich die DLL auch in Delphi oder Basic nutzen kann?

Grüße
C. Penkwitt

Hallo Christian,

in fast allen Sprachen sind 0-terminierte Strings verfügbar, darauf basiert auch das Windows-API; in Delphi heisst das dann array[0…n] of char. Auch die Funktionen wie StrLen, StrCopy, StrCat stimmen weitgehend überein. Pascal-Strings (string[nn]) sind dagegen nicht wirklich portierbar.

Grundsätzlich geht natürlich immer alles, man könnte z.B. Stub-Funktionen schreiben, die die Typen hin- und zurückwandeln, notfalls in Assembler. Darauf beruhen heutige systemübergreifende Interfaces von DDE über DCOM bis .NET. Besser ist es aber den Aufwand von vornherein zu vermeiden.

Wenn du in C(++) entwickelt hast, dann verwendest du ja wahrscheinlich solche Strings und Pointer darauf. Damit (PChar) kannst du in Delphi fast genauso arbeiten wie in C.

Ich habe schon reinrassige PChar-Software geschrieben und ebenso reinrassige String[nn]-Software, je nach Umgebung. Das ist auch Gewohnheitssache, zwingende Vorteile hat keine Version.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo
Mein Vorschlag:
Es kann eine Datei sein, die komprimiert werden soll, also muß en Dateiname übergeben werden. Desweiteren muß die dll einen Wert zurückgeben, 0 = Fehler, 1 = Okay oder so.
Andere Möglichkeit:
Wenn Du in Deinem Code einen String hast, oder besser einen Speicherbereich von n-Bytes Länge, dann übergibst Du der dll in einem Parameter die Startadresse und in einem anderen die erste Länge.
Als Rückgabewert empfehle ich 0 für Fehler oder ggf. n für die neue Länge. Dann dürfen auch „0“ Bytes mit drin sein.
Die Dll braucht dann keinen eigenen Speicherbereich für Speicherung.
Der Aufruf der Dll-Function ist dann immer gleich , unabhängig von der Sprache.
MfG
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]