powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
25 сообщений из 43, страница 1 из 2
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804318
Ural2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Был проект: программа на delhhi 2007 + dll на delhhi 2007. Программу перевели на delhhi XE3, dll перевести нельзя (сторонний разработчик).
dll в головную программу передает данные, в том числе типа string. Получаю строки в виде крокозябр
.
Перечитала кучу документации по приведению типов и кодировок, сотни попыток - все безрезультатно...
Помогите, люди добрые!
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804319
shonli95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
string в d7 это ansistring когда в xe+ это уже utf16 следовательно ты понял
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804321
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ural2dll в головную программу передает данные, в том числе типа string.

Точно String, а не PAnsiChar? Если да, тогда лучше сразу забудь о переходе на ХЕ3.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804327
shonli95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

а какие проблемы могут быть с pansichar ? Это же всего лишь массив байт, который кончается на #0
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804329
Ural2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shonli95string в d7 это ansistring когда в xe+ это уже utf16 следовательно ты понял
Пока нет. Все еще пытаюсь найти способ преобразования. Или, как говорит Dimitry Sibiryakov, дело - труба?
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804348
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shonli95а какие проблемы могут быть с pansichar ?

Вот с ним-то как раз проблем быть не должно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804358
shonli95
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ural2Пока нет. Все еще пытаюсь найти способ преобразования.

Как это нет? Всё логично

pchar=pAnsiChar
string=AnsiString

Это не способ преобразования, это способ получения строки определённого формата. Я не думаю, что там используется string по причине того, что библиотеку можно сразу выбросить
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804369
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕсли да, тогда лучше сразу забудь о переходе на ХЕ3.
Что мешает сменить String на AnsiString?
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804372
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatЧто мешает сменить String на AnsiString?
Coe Page Aware после D2009 мешает. А вообще, если автор код покажет, может и получится вырулить.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804373
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyпосле D2009
начиная с...
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804374
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Кодовую страницу можно и явно указать.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804376
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще у меня есть рабочий код в XE3 работающий с DLL из 2007.

Именно потому что компонент для юникода не был адаптирован я сделал к нему обертку в виде DLL.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804377
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatКодовую страницу можно и явно указать.
Да дело не в этом, дело в дополнительных полях в заголовке строки. Если там, вдруг, строка освобождается в приложении то будет AV.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804378
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Я таких нюансов уже и не помню. Но в любом случае в D2007 и ранее строка по сути это простой массив байт с длиной по смещению -4.

Если мне память не изменяет.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804379
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ural2shonli95string в d7 это ansistring когда в xe+ это уже utf16 следовательно ты понял
Пока нет. Все еще пытаюсь найти способ преобразования. Или, как говорит Dimitry Sibiryakov, дело - труба?


Покажите определения функций, которые передают строки (или записи/классы с ними). BorlandMM (ShareMem) используется?
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804380
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatKazantsev Alexey,

Я таких нюансов уже и не помню. Но в любом случае в D2007 и ранее строка по сути это простой массив байт с длиной по смещению -4.

Если мне память не изменяет.

И refCount по смещению -8
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804382
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatНо в любом случае в D2007 и ранее строка по сути это простой массив байт с длиной по смещению -4.
Всё так, только при освобождении/ресайзе строки будет вычисляться адрес блока памяти с учётом всех полей заголовка. dll сформирует строку без дополнительных полей, понятное дело, а приложение будет считать, что поля есть и адрес вычислит неправильно. В общем, код смотреть нужно.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804383
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ural2, если надоест экспериментировать - тупо сделайте в 2007 прокладочную dll с конвертацией строк в pansichar
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804384
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

На крайняк можно в D7-2007 сделать еще одну обертку где переобернуть функции в PChar или еще что в этом духе.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804386
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, два костыля - пара!
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804387
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatНа крайняк можно в D7-2007 сделать еще одну обертку где переобернуть функции в PChar или еще что в этом духе.
Если там строки передаются в составе массивов/объектов/записей, то разрулить можно будет и без прокладок.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804406
Ural2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получаю из dll 2007 массив из указателей на DataSets. Спотыкаюсь на первой строке - не могу прочитать наименование DataSet ( латиница). До разбора данных в DataSet дело не доходит.
Вот код:

type
CyrillicString = type AnsiString(1251);

var
a_ds : array [0..99] of pointer; // массив указателей на DataSets, который дает dll 2007


procedure LoadData(ds_num: integer);
var
ds: TDataset;
ds_name: String;
A: AnsiString;
U: UnicodeString;
C: CyrillicString;
Src: TEncoding;
Dst: TEncoding;
begin

ds:=A_ds[0];

// реально наименование первого Dataset = Around (латиныца)

// попытка 1 получить наименование - кракозябры
ds_name:=ds.Name;
cxMemo1.Lines.Add('String = '+ds_name);

// попытка 2 получить наименование - ???
A:=TDataset(A_ds[i]).Name;
cxMemo1.Lines.Add('AnsiString = '+A);

// попытка 3 получить наименование - кракозябры
U:=TDataset(A_ds[i]).Name;
cxMemo1.Lines.Add('UnicodeString = '+U);


// попытка 4 получить наименование - ???
C:=TDataset(A_ds[i]).Name;
cxMemo1.Lines.Add('CyrillicString = '+C);


// попытка 5 получить наименование (в Dst подставляла разные кодовые страницы) - ???
Src := TEncoding.GetEncoding(1251);
Dst := TEncoding.GetEncoding(65001);
ds_name := Dst.GetString(TEncoding.Convert(Src, Dst, Src.GetBytes(TDataset(A_ds[i]).Name)));
cxMemo1.Lines.Add('TEncoding = '+ds_name);

end;



Вариант с промежуточной dll-2 на 2007 работает:
- загрузка данных из dll-1
- выгрузка данных DataSets в файлы
- загрузка файлов в программе на XE
Но желательно более простую технологию без многочисленных файловых операций (цепочка работает круглосуточно раз в 30 сек).
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804408
Ural2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В приложенном коде не обращайте внимания на не объявленную i (i=ds_num) - это я пыталась убрать лишнее из кода
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804419
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ural2 ds_name:=ds.Name;
Сделай так:
Код: pascal
1.
ds_name := UnicodeString(AnsiString(Pointer(ds.Name)));


Но вообще, не факт, что поля объектов в разных версиях имеют одинаковое смещение (у поля FName - одинаковое), поэтому даже если со строками ситуация разрешится это ещё не гарантия успешности такого подхода.
...
Рейтинг: 0 / 0
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
    #39804428
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyСделай так
Нет, так работать не будет. Нужно вручную перекодировать.
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как в delhhi XE3 считать строку из dll, написанной на delphi 2007
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]