Danke erstmal für die Antworten. Das Problem ist, dass ich an der D6 Seite nichts machen kann, die Anwendung ist da und soll so bleiben (außerhalb meines Einflußbereiches).
Natürlich könnte ich die
DLL in D6 erstellen, aber zum einen will ich ja hin zu D10, außerdem gibt es da ein paar sehr nette Funktionen in D10, die ich für diese Aufgabe gut gebrauchen kann.
Ich habe jetzt ein wenig experimentiert und eine "Lösung" gefunden, die zumindest in der kleinen Testumgebeung funktioniert. Jetzt würde ich gerne wissen, ob das Zufall ist und bei anderen Konstllation auch zu Abstürzen führt oder ob das zwar prinzipiell sehr unsauber programmiert ist, aber der Zweck heiligt die Mittel.
Also wie gesagt an der D6 Seite kann/will/darf ich nicht ändern.
Da gibt es einfach die Funktion (vereinfacht)
Code:
type TStringFunction = function: string;
Ich habe jetzt die D10 Funktion so umgebaut dass ich quasi einen Widestring als Container für einen Ansistring missbrauche. Je nach Länge des zu übergebenden Strings wird eben am Ende ein #0 mit übermttelt, aber das wäre in der D6 Anwendug kein Problem.
Code:
function ExportString: widestring; Export;
var
Ansi: ansistring;
begin
ansi := 'Hallo';
setlength(result, (length(
ansi) div 2) + (length(
ansi) mod 2));
fillchar(result[1], 2 * length(result), 0);
move(
ansi[1], result[1], length(
ansi));
// result := 'hallo';
end;
Jedenfalls kommt in der D6 Anwendung ein "Hallo" +#0 an. Die Frage ist jetzt eben, ob ich da nur zufälligerweise keine Speicherverletzung erlebe oder ob das prinzipiell so gehen kann.