ОК, так что не пробовал, поэтому большой жирный отказ от ответственности ударил по этому.
В программе просмотра справки просмотрите тему (Unicode в RAD Stufio) ms-help: //embarcadero.rs2009/devcommon/unicodeinide_xml.html
.
Возвращая строку Delphi 2007 в Delphi 2009, вы должны получить две проблемы.
Во-первых, кодовая страница, упомянутая Робом. Вы можете установить это, объявив другую AnsiString и вызвав StringCodePage для новой AnsiString. Затем назначьте это старому AnsiString, вызвав SetCodePage. Это должно сработать, но если этого не произойдет, все еще есть надежда.
Вторая проблема - размер элемента, который будет чем-то совершенно безумным. Это должно быть 1, поэтому сделайте это 1. Проблема здесь в том, что нет функции SetElementSize, на которую можно опереться.
Попробуйте это:
var
ElemSizeAddr: PWord; // Need a two-byte type
BrokenAnsiString: AnsiString; // The patient we are trying to cure
...
ElemSizeAddr := Pointer(PAnsiChar(BrokenAnsiString) - 10);
ElemSizeAddr^ := 1; // The size of the element
Это должно сделать это!
Теперь, если вещь StringCodePage / SetCodePage не сработала, вы можете сделать то же, что и выше, изменив строку, в которой мы получаем адрес для вычета 12 вместо 10.
Он взломал все это, поэтому я люблю его.
В конечном итоге вам потребуется портировать эти библиотеки DLL, но это сделает порт более управляемым.
Одно последнее слово - в зависимости от того, как вы возвращаете AnsiString (результат функции, выходной параметр и т. Д.), Вам может понадобиться сначала присвоить строку другой переменной AnsiString, просто чтобы убедиться, что нет проблем с перезаписью памяти.