Ich kann es gerade nicht ausprobieren, aber wie sieht es mit UnicodeToUTF8 oder WideCharLenToStrVar aus, wobei ich bei Linux vermute, dass UTF8 korrekt wäre? Da MarshaledAString nur ein Mapping auf die anderen Typen ist, sollte das doch kompatibel sein und dort verwendet werden können.
Stimmt:
_System (MarshaledAstring (UTF8String(s)));
funktioniert.
Könnte fast schwören, ich hätte das zuvor auch mal probiert, muss aber dann wohl doch was anderes gewesen sein...