Ich habe es leider noch nicht verstanden was du da genau vorhast, aber mir fällt folgendes auf:
Du erzeugst den MemoryStream zweimal
s := TMemoryStream.Create;
und in der
Dll vermutlich noch einmal:
function DataInputStr(c: string; x: IXMLDocument): TMemoryStream;
Entweder den Stream als Parameter übergeben und sich auch ums Freigeben kümmern oder die
Dll erzeugen lassen und dann nach dem Aufruf freigeben (finde ich nicht so toll).