Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2020, 02:39   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Передача string как массива байт (из Delphi 7) в dll (из Delphi 10.2)

Доброе время суток
Я хочу переменную типа string передать их приложения в dll в виде массива байт

Есть функция перевода строки в массив байт

Код:
type
    TByteArr = array of byte;

function TForm1.StrToByte(const Value: String): TByteArr;
var
    I: integer;
begin
    SetLength(Result, Length(Value));
    for I := 0 to Length(Value) - 1 do
        Result[I] := ord(Value[I + 1]) - 48;
end;
есть функция перевода массива в строку

Код:
function TForm1.ByteToString(const Value: TByteArr): String;
var
    I: integer;
    S : String;
    Litera: char;
begin
    S := '';
    for I := Length(Value)-1 Downto 0 do
    begin
        Litera := Chr(Value[I] + 48);
        S := Litera + S;
    end;
    Result := S;
end;
В приложениb Delphi 7, это работает на ура

А вот если приложение на Delphi 7, а dll на Delphi 10.2, то возникает проблема в преобразовании в dll (из массива в строку) кириллицы и символов (абра кадабра), с латиницей все норм.

В чем может быть проблема?
Заранее спасибо за ответ

Последний раз редактировалось KBO; 06.04.2020 в 02:44.
KBO вне форума Ответить с цитированием
Старый 06.04.2020, 02:48   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
В чем может быть проблема?
В Delphi 7. Эта версия давно уже устарела.
Версии Дельфи до Д2007 включительно работали только с Ansi строками (один символ - один байт). Версии Дельфи начиная с Д2009 работают с Юникодными строками (один символ - два байта).
northener вне форума Ответить с цитированием
Старый 06.04.2020, 11:27   #3
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Версии Дельфи начиная с Д2009 работают с Юникодными строками (один символ - два байта).
По умолчанию там String в юникоде, но помомо String есть ещё AnsiString.
Streletz вне форума Ответить с цитированием
Старый 06.04.2020, 15:50   #4
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
В Delphi 7. Эта версия давно уже устарела.
Версии Дельфи до Д2007 включительно работали только с Ansi строками (один символ - один байт). Версии Дельфи начиная с Д2009 работают с Юникодными строками (один символ - два байта).
про байты я читал...
Так как мне поступить:
в приложении (Delphi 7), строку сначало перевести в unicode, потом в массив байт и только потом передать в dll?
KBO вне форума Ответить с цитированием
Старый 07.04.2020, 03:41   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
про байты я читал...
Так как мне поступить:
Вы задачу свою озвучьте!
Иначе получится ещё одна Сага о X, Y и Z...
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение нужных байт из массива байт Punk1911 Помощь студентам 6 22.04.2014 13:40
Передача текстовых данных Delphi -> PHP и PHP -> Delphi. alextrof94 Общие вопросы Delphi 8 21.12.2013 21:48
Передача массива в Delphi atagilov C# (си шарп) 1 30.01.2012 15:42
Передача массива C# в Delphi atagilov Общие вопросы Delphi 4 29.01.2012 13:28
Произведение элементов массива в функции (передача массива в функцию) (Delphi) Toxa16 Помощь студентам 1 23.04.2011 04:42