|
|
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть функция в DLL, которую вызывает Oracle. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Функция пишет входящее значение в лог и возвращает его обратно в Oracle. С возвращаемым значением все в порядке, а в лог пишутся знаки вопроса, т.е. неявное преобразование в string работает не корректно. Как правильно преобразовать PCHAR в STRING? Oracle 11g 64bit Delphi XE4 DLL скомпилирована 64 bit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 17:15 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rb, Для начала выяснить, pwidechar там передается или pansichar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 17:29 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rbКак правильно преобразовать PCHAR в STRING? Для начала надо выяснить а действительно ли Оракул даёт тебе PChar, а не PAnsiChar или PUtf8Char. Потом надо вкуривать управление памятью, чтобы быть уверенным, что ты возвращаешь указатель на валидный буфер, а не на мусор в уже освобождённой памяти. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 17:36 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
В Oracle Код: pascal 1. 2. Если это поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 17:39 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Sergey_rbКак правильно преобразовать PCHAR в STRING? Для начала надо выяснить а действительно ли Оракул даёт тебе PChar, а не PAnsiChar или PUtf8Char. Потом надо вкуривать управление памятью, чтобы быть уверенным, что ты возвращаешь указатель на валидный буфер, а не на мусор в уже освобождённой памяти. В Oracle возвращается тоже самое значение, что и уходит от него. Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 17:41 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rb, Вы там ^ нигде не потеряли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 17:46 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rbЕсли это поможет Не поможет. Это кодировка хранения (причём неизвестно выполняется ли этот контракт, ибо Оракул не контролирует данные). Она может быть сто раз преобразована в любую форму пока дойдёт до твоей функции. Так что не ленись, читай документацию, ставь эксперименты, разбирайся. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 18:02 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Запиши строку как бинарный буфер через filestream и смотри, в каком виде она приходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 18:21 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Теперь передайте строку из 6 символов (только латиницу и только кириллицу) и посмотрите, что будет в файлах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2019, 18:44 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. При запуске из тестовой программы: Передаю латинницу qwerty в файле qwerty Передаю кириллицу йцукен в файле 9FC:5= При запуске из Oracle передаю qwerty в файле 睱牥祴⸀㜹㔮0l2 передаю йцукен в файле ⸀㜹㔮0l2 передаю 123456 в файле ㈱㐳㘵⸀㜹㔮0l2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 09:30 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Очень хорошо. А теперь открой получившийся файл в hex режиме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 10:01 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rb В Oracle Код: pascal 1. 2. Если это поможет у клиента Oracle может быть кодировка отличная от этих кодировок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 10:25 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Василий 2 Очень хорошо. А теперь открой получившийся файл в hex режиме. Странная ситуация - при первом вызове текста qwerty, в файл пишется qwerty, При повторном запуске функции, пишутся китайские иероглифы. Если переоткрыть отладчик, при этом DLL закрывается и заново открывается, то опять все нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 12:07 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Открывая файл как текст, ты в любом случае его перекодируешь. Поэтому сложно понять, что там было изначально. Hex режим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 13:55 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Запускаю с параметром qwerty, в файле тоже qwerty коды 71,77,65,72,74,79 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 14:08 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Параметр йцукен в файле коды E9,F6,F3,EA,E5,ED ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 14:14 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rbПараметр йцукен в файле коды E9,F6,F3,EA,E5,ED А теперь идёшь на https://ru.wikipedia.org/wiki/Windows-1251 и воочию убеждаешься, что да, это оно, а вовсе не utf-16 который ты ожидаешь в своей функции. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 14:29 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Теперь я окончательно запутался - мне надо на стороне Оракла менять кодировку или в DLL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 14:42 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rb, В функции использовать pansichar, но еще откуда-то нужно получить кодировку, либо принудительно использовать Win1251 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 14:52 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rbТеперь я окончательно запутался - мне надо на стороне Оракла менять кодировку или в DLL? Использовать мозг и документацию я тебе уже предлагал, но, видимо, не судьба. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 14:54 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Sergey_rbТеперь я окончательно запутался - мне надо на стороне Оракла менять кодировку или в DLL? Использовать мозг и документацию я тебе уже предлагал, но, видимо, не судьба. Был бы мозг - не работал бы программистом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 15:36 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Поставил PAnsiChar Вроде работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 16:15 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Sergey_rb Теперь я окончательно запутался - мне надо на стороне Оракла менять кодировку или в DLL? Теперь ты знаешь, что Оракл в твою DLL передает Win1251. Что уж с этим делать - второй вопрос, зависит от того, что ты хочешь достичь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 16:15 |
|
||
|
Преобразование PCHAR в STRING в Delphi XE 64bit
|
|||
|---|---|---|---|
|
#18+
Василий 2 Sergey_rb Теперь я окончательно запутался - мне надо на стороне Оракла менять кодировку или в DLL? Что уж с этим делать - второй вопрос, зависит от того, что ты хочешь достичь. Отложу до понедельника... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2019, 16:46 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39891252&tid=2038835]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 541ms |

| 0 / 0 |
