|
|
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Имеется функция с определением char* в c++ что аналогично UTF8String в Delphi. Строка удачно уходит, в ответ я должен получить строку char* и пишу Код: pascal 1. В ответ приходит ничего NULL хотя если исправить тип UTF8Char на PAnsiChar то мы строку видим c поломанным юникодом. Что наталкиает на мысь попробовать PWideChar но и там уже не строка, а квадрат отображается. Что за магия такая ? В одну сторону влизает, а вдругую не вылизает Соглашение о вызове верное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 15:25 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, что за компилятор C++ использовался, какие у него настройки (какого размера Char), что функция делает, что у тебя за Delphi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 15:33 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
чччД, Все настройки не скажу, потому что не в курсе. sizeof(char) = 1 Visual C++ 15.0 Функция возвращает переменную строковую, произвольной длины Код: pascal 1. Заполнение этой длины идёт таким способом Код: pascal 1. 2. Возвращает char* для внутренного использования в c++ Данные в таком контейнере хранятся в UTF8 спокойно. Я могу спокойно отправить юникодный текст благоларя UTF8String в внутрь, но уже принять не могу. Хотя во внутреннем представление он хранится отлично. length на возвращаемый текст UTF8String возвращает 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 15:49 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
delphi tokyo 10.3 ... Есть подозрение что среда не умеет работать с UTF8String ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 15:52 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдоdelphi tokyo 10.3 ... Есть подозрение что среда не умеет работать с UTF8String Ну при чем тут "среда". В C++, char * (или pChar) - всего лишь указатель на область памяти. Ты просто должен знать, как правильно интерпретировать данные в этой области. А если Гирлионайльдо...квадрат отображается... - это всего лишь означает, что ты отображаешь данные не должным образом. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 16:10 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
чччД, Опробовал всё... (Реально всё) И оказалось, что бы произошла магия преобразования, надо объявить тип возрата PAnsiChar В локальной области, объвить переменную типа UTF8String присвоить ей значение функции, типа PAnsiChar И тогда преобразование просиходит x_x Было te 'Hello вќ¤ в'#$98'Ђ в'#$98'† в'#$98'‚ в'#$98'» в™ћ в'#$98'Ї в'#$98#$AD' в'#$98'ў € world' Стало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 16:21 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Я думаю что это баг, то что объявив тип возврата UTF8String приходит пустая строка. И надо так извращатся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 16:23 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоЯ думаю что это баг, то что объявив тип возврата UTF8String приходит пустая строка. Да. И это твой баг. Причём как в С++, так и в Дельфи. Потому что char* это совсем-совсем не "аналогично UTF8String". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 16:58 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Ну тогда другой аналогии нету в Delphi. Придётся довольноствоватся пирогом который есть, раз Delphi разработчики не предусмотрели такой вариант. Кстати, я вывел структуру и попытался из неё получить данные, в обход вызовов функций из сей. Получилось только так (Надо было от указателя отнять -4 что бы он адекватно отобразил строку) Код: pascal 1. 2. 3. 4. Типа val объявлен как Pointer И провёл некоторое расследование, и выснилось что Delphi произвольно двигает строку на +4 с чего и был сделан вывод отнять 4. Возможно если был включён 64 битный режим программы. Пришлось двигать на 8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 17:09 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоНу тогда другой аналогии нету в Delphi. Придётся довольноствоватся пирогом который есть, раз Delphi разработчики не предусмотрели такой вариант. Да ну? Погуглить и найти System.UTF8Char и, соответственно, System.PUTF8Char это настолько сложно для современных программистов?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 19:03 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, А какой смысл? Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 19:54 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоDimitry Sibiryakov, А какой смысл? Код: pascal 1. А какой должен быть смысл, по-твоему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 19:57 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
чччД, Смыл рекомендации, конечно - же, раз предлагают. А спроса нет, тот же тип - под другим именем. Нет, он всё ещё делает то же самое что и старый, магие не произошло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 22:34 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдочччД, Смыл рекомендации, конечно - же, раз предлагают. А спроса нет, тот же тип - под другим именем. Нет, он всё ещё делает то же самое что и старый, магие не произошло Конечно, не произошло. Все так же нужно читать учебники нубам.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2018, 23:05 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоИмеется функция с определением char* в c++ что аналогично UTF8String в DelphiНаиболее близко - это PAnsiChar или PShortInt. char в си - это всегда 1 байт -128..127. Можно привести к AnsiString - строка обрежется на 1-м нуле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 09:42 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Тут уже достаточно потыкали в нубство, дополню лишь наводящим вопросом: функция на c++ должна вернуть char*, как думаешь, какой тип в Delphi ему соответствует? Про эффекты от выделения памяти в DLL и её последующего, судя по всему, неосвобождения пока не будем, пусть это станет сюрпризом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 10:40 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
YuRock... char в си - это всегда 1 байт -128..127. ... Старый, ты щас снова насоветуешь. Давно уже нет. Более того, в C вообще: sizeof('a') == sizeof(int), а вовсе не sizeof(char). В C++: sizeof('a') == sizeof(char). А за заявление, что sizeof(char) всегда == 1, канделябром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 10:54 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
чччД, Если быть точным то так https://ru.stackoverflow.com/a/118235/221228 C++ Standard - 5.3.3 / 1 : sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1. Более интересным, кстати говоря, является тот факт, что в C sizeof('t') будет равен не 1, а sizeof(int). Символьные константы (заключённые в одинарные кавычки) по умолчанию имеют: тип int в С и тип char в C++. Поэтому в C справедливо равенство sizeof('t') == sizeof(int), а в C++ — равенство sizeof('t') == sizeof(char). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:13 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоА какой смысл? Всё дело в волшебных пузырьках compiler magic при неявных приведениях типов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:32 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, да, в C++: sizeof(char) == 1 (на сегодняшний день. :)) Но рассказывают, что есть компиляторы, у которых в байте не 8 бит, а 16 и 32, и Char такой же... Т.е., вернет тебе sizeof() единичку, а там жуть с рогами, а не 8 битный байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:03 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
чччДрассказывают, что есть компиляторы, у которых в байте не 8 бит, а 16 и 32, и Char такой же... Это к гуглю с его ведроидом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:12 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovчччДрассказывают, что есть компиляторы, у которых в байте не 8 бит, а 16 и 32, и Char такой же... Это к гуглю с его ведроидом. Надо рассматривать конкретную ситуацию, а не пытаться универсальный код строчить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:24 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
чччДYuRock... char в си - это всегда 1 байт -128..127. ... Старый, ты щас снова насоветуешь. Давно уже нет. Более того, в C вообще: sizeof('a') == sizeof(int), а вовсе не sizeof(char). В C++: sizeof('a') == sizeof(char). Ну при чем тут константы. У нас же переменная - параметр функции. чччД А за заявление, что sizeof(char) всегда == 1, канделябром. Ну я не встречал обратных ситуаций. Может быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 14:05 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
16.04.2018 13:24, чччД пишет: > Надо рассматривать конкретную ситуацию, а не пытаться универсальный код строчить. ведроид не нужен. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 18:42 |
|
||
|
UTF8String получение из c++
|
|||
|---|---|---|---|
|
#18+
Строки выделяются и освобождаются на стороне dll-ки, всё работает как по маслу в общем сейчас, после такой конвертации.. З.ы проблема случалась только в случае такого описания как char val[1]; К слову, возбуждёному уму Siemargl. Смысл читать про каждый тип в отдельности? Когда можно просмотреть его исходную часть, конечно же если он неявляется частью компилятора. А читать отрасаль разновдиностей одних и тех же типов (Из за говнокодерства, и непривязни использовать уже существущие - превратившись всё в маразм и тяжёлый груз) Это уже будет человек с мало понимающим, что такое программировать и как оно просиходит. А я программист со стажем 6 лет, на сях.. Просто заказ интересный пришёл на пару десятков, сделать полноценное подключение пыхи к дельфи, с последующим процентом заработка в добавок от проекта. Что конечно же, будет по корману в самый раз. Ну а на дельфи я программирую 2 дня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 23:58 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=111&tid=2041008]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 354ms |

| 0 / 0 |
