Ich habe eine gemeinsam genutzte Bibliothek erstellt, die ein Array von Strings oder nur einen String als Funktionsparameter verwendet. Ich verwende den eingebauten "string" -Typ, der in der D-Sprache kommt. Ich habe die Bibliothek in einer anderen D-Anwendung getestet, die Bibliothek funktioniert. Für GUI benutze ich Lazarus, und das Problem ist, dass ich Pascals Strings nicht durch die Library identifizieren kann.Senden/Empfangen von Zeichenfolgen und Arrays zwischen D 'Shared Library und Pascal (Lazarus) Host
Ich verwende den AnsiString-Typ in Pascal, und ich glaube, dass die Standardcodierung in D auch ANSI ist. Wenn ein String-Array an D gesendet wurde, wird es komplett durcheinander gebracht. In Pascal setze ich seine Länge auf 1, aber mit dem Debugger finde ich, dass es in der Bibliothek "3086778472" wird. Aber das ist nicht alles t, wenn dieser Code in der Bibliothek ausgeführt wird:
line=<recieved-array-of-string's-name>[0];
Es bewirkt eine ‚Außen: SIGSEGV‘. Ich habe keine Ahnung, was dieser Fehler bedeutet.
Meine Frage hier ist: Wie konvertiere ich eine D-Zeichenfolge in eine Pascal und dann wieder zurück, und das gleiche mit Arrays?
EDIT: Ich habe versucht Eugen Riecks Lösung, es funktioniert nicht. Ich denke, das Problem ist nicht das; Ich habe eine andere Bibliothek in D mit einer Funktion erstellt, die nur eine Zahl (Datentyp = Ubyte) zurückgibt, aber das funktioniert auch nicht.
EDIY2: Weiter verfolgt das Problem, ich habe festgestellt, dass die Bibliothek die Parameter nicht korrekt empfängt.
Seien Sie vorsichtig nicht nur mit Strings, sondern auch mit dynamisch zugewiesenen Arrays. –
Sieht aus, als würden Ihre Aufrufkonventionen nicht übereinstimmen. –