Цитата |
---|
Денис Вицко написал: Похоже ,что проблема кроется в несоответствии unicode и ansi объявлений.
Если Вы используете Delphi XE2 и выше, то все объявления строковых переменных типа String реально будут как UnicodeString. Char - тоже будут, соответственно, уже не однобайтовой кодировки.
Тогда как в ГИС-ядре указанная Вами функция требует кодировку ANSI.Код |
---|
// Названия устройств из names предназначены для показа пользователю, а технические
// названия USB-устройств из programmNames - для установки связи с GPS-приемником.
// i-е название из names и i-е техническое название из programmNames соответствуют i-му устройству
long int _export WINAPI gpsTestGetUSBDevicesNames(char* names, char* programmNames, long int * count); |
Для обращения к ней из Delphi следует сделать объявление:Код |
---|
names: array [1..MAX_PATH] of AnsiChar;
programmNames: array [1..MAX_PATH] of AnsiChar;
function gpsTestGetUSBDevicesNames(names: PAnsiChar; programmNames: PAnsiChar; var count: Integer): Integer;
{$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF} external sGisGps; |
В GIS ToolKit, кстати, есть специальное переопределения для этого - GTKString, GTKChar, GTKPString, GTKPChar. |
Исправил на:
Код |
---|
function gpsTestGetUSBDevicesNames(names: PAnsiChar; programmNames: PAnsiChar; var count: Integer): Integer;
{$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF} external sGisGps;
|
Код |
---|
procedure TMainFrm.GPS2Click(Sender: TObject);
var
Ret: Cardinal;
names: array [1..MAX_PATH] of AnsiChar;
programmNames: array [1..MAX_PATH] of AnsiChar;
count: Integer;
begin
try
Ret := gpsTestGetUSBDevicesNames(PAnsiChar(@names), PAnsiChar(@programmNames), count);
except
on e:exception do AddErrInfo('TMainFrm.GPS2Click: ', E);
end;
end;
|
Все равно выгружает UTF-8
Обратите внимание на данные которые содержат переменные. Может всеже ваш Api неправльно формирует строку names, programmNames при вызове функции.
names содержит:
('U', #0, 'S', #0, 'B', #0, '-', #0, 'C', #4, 'A', #4, 'B', #4, '@', #4, '>', #4, '9', #4, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, '!', #4, '>', #4, 'A', #4, 'B', #4, '0', #4, '2', #4, '=', #4, '>', #4, '5', #4, ' ', #0, 'U', #0, 'S', #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0)
programmNames
('\', #0, '\', #0, '?', #0, '\', #0, 'u', #0, 's', #0, 'b', #0, '#', #0, 'v', #0, 'i', #0, 'd', #0, '_', #0, '0', #0, '4', #0, '6', #0, 'd', #0, '&', #0, 'p', #0, 'i', #0, 'd', #0, '_', #0, 'c', #0, '0', #0, '7', #0, '7', #0, '#', #0, '5', #0, '&', #0, '3', #0, '0', #0, 'b', #0, '7', #0, 'b', #0, '9', #0, '9', #0, '0', #0, '&', #0, '0', #0, '&', #0, '1', #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, '\', #0, '\', #0, '?', #0, '\', #0, 'u', #0, 's', #0, 'b', #0, '#', #0, 'v', #0, 'i', #0, 'd', #0, '_', #0, '0', #0, '4', #0, '6', #0, 'd', #0, '&', #0, 'p', #0, 'i', #0, 'd', #0, '_', #0, 'c', #0, '3', #0, '1', #0, 'c', #0, '#', #0, '5', #0, '&', #0, '3', #0, '0', #0, 'b', #0, '7', #0, 'b', #0, '9', #0, '9', #0, '0', #0, '&', #0, '0', #0, '&', #0, '4', #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0)
Вы не ответили на вопросы.
1. Мне нужно парсить строку?
2. Почему между записями много нулей?