Если ренее, в Delphi7 все это работало хорошо, то теперь в DelphiXE5 вместо 67:02:3190201:1, теперь пишет везде просто 6 вместо нормального длинного адреса г.Вязьма, ул.Новая, д.5, теперь пишет @-
Программа компилируется нормально. Похоже не предусмотрели, что-то с кодировкой, не пойму, что не так?
mapAppendSemantic - функция, принимающая на вход строки в однобайтовой кодировке ANSI. Начиная с Delphi XE3 тип string - это юникод строки (для русского языка два байта в Windows). Инструкция GTKPChar заставляет взять указатель на начало ANSI-строки, а передается юникод.
Выход: 1. либо использовать mapAppendSemanticUn, как Вы и сделали, и это наиболее верное решение (но, надо понимать, что если Вы в таком виде оставите код и попробуете потом вернуться в компилятор ниже, чем XE3, у Вас будет AccessViolation) 2. либо использовать mapAppendSemantic, но предварительно перевести строки в ANSI. 3. либо работать через компоненты GTK.
в maputil.pas есть функции:
Код
// преобразовать строку в WideString в зависимости от версии Delphi
function GTKWideString(aValue : string): WideString;
// преобразовать строку в AnsiString в зависимости от версии Delphi
function GTKAnsiString(aValue : string): AnsiString;
mapAppendSemantic - функция, принимающая на вход строки в однобайтовой кодировке ANSI. Начиная с Delphi XE3 тип string - это юникод строки (для русского языка два байта в Windows). Инструкция GTKPChar заставляет взять указатель на начало ANSI-строки, а передается юникод.
Выход: 1. либо использовать mapAppendSemanticUn, как Вы и сделали, и при работе через MAPAPI это наиболее верное решение (но, надо понимать, что если Вы в таком виде оставите код и попробуете потом вернуться в компилятор ниже, чем XE3, у Вас будет AccessViolation) 2. либо использовать mapAppendSemantic, но предварительно перевести строки в ANSI. 3. либо работать через компоненты GTK.
в maputil.pas есть функции:
Код
// преобразовать строку в WideString в зависимости от версии Delphi
function GTKWideString(aValue : string): WideString;
// преобразовать строку в AnsiString в зависимости от версии Delphi
function GTKAnsiString(aValue : string): AnsiString;