
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.04.2019, 21:54
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Был проект: программа на delhhi 2007 + dll на delhhi 2007. Программу перевели на delhhi XE3, dll перевести нельзя (сторонний разработчик). dll в головную программу передает данные, в том числе типа string. Получаю строки в виде крокозябр . Перечитала кучу документации по приведению типов и кодировок, сотни попыток - все безрезультатно... Помогите, люди добрые! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.04.2019, 21:59
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
string в d7 это ansistring когда в xe+ это уже utf16 следовательно ты понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.04.2019, 22:05
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Ural2dll в головную программу передает данные, в том числе типа string. Точно String, а не PAnsiChar? Если да, тогда лучше сразу забудь о переходе на ХЕ3. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.04.2019, 22:37
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Dimitry Sibiryakov, а какие проблемы могут быть с pansichar ? Это же всего лишь массив байт, который кончается на #0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.04.2019, 22:50
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
shonli95string в d7 это ansistring когда в xe+ это уже utf16 следовательно ты понял Пока нет. Все еще пытаюсь найти способ преобразования. Или, как говорит Dimitry Sibiryakov, дело - труба? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 00:08
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
shonli95а какие проблемы могут быть с pansichar ? Вот с ним-то как раз проблем быть не должно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 00:26
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Ural2Пока нет. Все еще пытаюсь найти способ преобразования. Как это нет? Всё логично pchar=pAnsiChar string=AnsiString Это не способ преобразования, это способ получения строки определённого формата. Я не думаю, что там используется string по причине того, что библиотеку можно сразу выбросить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:19
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Dimitry SibiryakovЕсли да, тогда лучше сразу забудь о переходе на ХЕ3. Что мешает сменить String на AnsiString? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:24
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
rgreatЧто мешает сменить String на AnsiString? Coe Page Aware после D2009 мешает. А вообще, если автор код покажет, может и получится вырулить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:26
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Kazantsev Alexeyпосле D2009 начиная с... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:26
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Kazantsev Alexey, Кодовую страницу можно и явно указать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:29
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
А вообще у меня есть рабочий код в XE3 работающий с DLL из 2007. Именно потому что компонент для юникода не был адаптирован я сделал к нему обертку в виде DLL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:31
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
rgreatКодовую страницу можно и явно указать. Да дело не в этом, дело в дополнительных полях в заголовке строки. Если там, вдруг, строка освобождается в приложении то будет AV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:33
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Kazantsev Alexey, Я таких нюансов уже и не помню. Но в любом случае в D2007 и ранее строка по сути это простой массив байт с длиной по смещению -4. Если мне память не изменяет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:33
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Ural2shonli95string в d7 это ansistring когда в xe+ это уже utf16 следовательно ты понял Пока нет. Все еще пытаюсь найти способ преобразования. Или, как говорит Dimitry Sibiryakov, дело - труба? Покажите определения функций, которые передают строки (или записи/классы с ними). BorlandMM (ShareMem) используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:35
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
rgreatKazantsev Alexey, Я таких нюансов уже и не помню. Но в любом случае в D2007 и ранее строка по сути это простой массив байт с длиной по смещению -4. Если мне память не изменяет. И refCount по смещению -8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:37
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
rgreatНо в любом случае в D2007 и ранее строка по сути это простой массив байт с длиной по смещению -4. Всё так, только при освобождении/ресайзе строки будет вычисляться адрес блока памяти с учётом всех полей заголовка. dll сформирует строку без дополнительных полей, понятное дело, а приложение будет считать, что поля есть и адрес вычислит неправильно. В общем, код смотреть нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:39
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Ural2, если надоест экспериментировать - тупо сделайте в 2007 прокладочную dll с конвертацией строк в pansichar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:39
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Kazantsev Alexey, На крайняк можно в D7-2007 сделать еще одну обертку где переобернуть функции в PChar или еще что в этом духе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:40
|
|||
|---|---|---|---|
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
О, два костыля - пара! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 01:41
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
rgreatНа крайняк можно в D7-2007 сделать еще одну обертку где переобернуть функции в PChar или еще что в этом духе. Если там строки передаются в составе массивов/объектов/записей, то разрулить можно будет и без прокладок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 09:22
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Получаю из 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 сек). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 09:36
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
В приложенном коде не обращайте внимания на не объявленную i (i=ds_num) - это я пыталась убрать лишнее из кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2019, 10:56
|
|||
|---|---|---|---|
|
|||
Как в delhhi XE3 считать строку из dll, написанной на delphi 2007 |
|||
|
#18+
Ural2 ds_name:=ds.Name; Сделай так: Код: pascal 1. Но вообще, не факт, что поля объектов в разных версиях имеют одинаковое смещение (у поля FName - одинаковое), поэтому даже если со строками ситуация разрешится это ещё не гарантия успешности такого подхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=58&tablet=1&tid=2039547]: |
0ms |
get settings: |
9ms |
get forum list: |
23ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
436ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 816ms |

| 0 / 0 |
