powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / UTF8String получение из c++
25 сообщений из 29, страница 1 из 2
UTF8String получение из c++
    #39630427
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется функция с определением char* в c++ что аналогично UTF8String в Delphi.

Строка удачно уходит, в ответ я должен получить строку char* и пишу

Код: pascal
1.
function FunctionName(...): UTF8Char; cdecl; external External_library;



В ответ приходит ничего NULL хотя если исправить тип UTF8Char на PAnsiChar то мы строку видим c поломанным юникодом. Что наталкиает на мысь попробовать PWideChar но и там уже не строка, а квадрат отображается.


Что за магия такая ? В одну сторону влизает, а вдругую не вылизает

Соглашение о вызове верное
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630429
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

что за компилятор C++ использовался, какие у него настройки (какого размера Char), что функция делает, что у тебя за Delphi?
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630434
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Все настройки не скажу, потому что не в курсе. sizeof(char) = 1

Visual C++ 15.0



Функция возвращает переменную строковую, произвольной длины
Код: pascal
1.
char              val[1];




Заполнение этой длины идёт таким способом
Код: pascal
1.
2.
memcpy(val, str, len);
val[len] = '\0';



Возвращает char* для внутренного использования в c++


Данные в таком контейнере хранятся в UTF8 спокойно.

Я могу спокойно отправить юникодный текст благоларя UTF8String в внутрь, но уже принять не могу.

Хотя во внутреннем представление он хранится отлично.


length на возвращаемый текст UTF8String возвращает 0
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630436
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi tokyo 10.3 ... Есть подозрение что среда не умеет работать с UTF8String
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630438
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдоdelphi tokyo 10.3 ... Есть подозрение что среда не умеет работать с UTF8String
Ну при чем тут "среда".
В C++, char * (или pChar) - всего лишь указатель на область памяти. Ты просто должен знать, как правильно интерпретировать данные в этой области. А если
Гирлионайльдо...квадрат отображается...
- это всего лишь означает, что ты отображаешь данные не должным образом. :)
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630440
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Опробовал всё... (Реально всё) И оказалось, что бы произошла магия преобразования, надо объявить тип возрата PAnsiChar

В локальной области, объвить переменную типа UTF8String присвоить ей значение функции, типа PAnsiChar

И тогда преобразование просиходит x_x

Было
te 'Hello вќ¤ в'#$98'Ђ в'#$98'† в'#$98'‚ в'#$98'» в™ћ в'#$98'Ї в'#$98#$AD' в'#$98'ў € world'


Стало
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630443
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что это баг, то что объявив тип возврата UTF8String приходит пустая строка. И надо так извращатся
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630448
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоЯ думаю что это баг, то что объявив тип возврата UTF8String приходит пустая строка.

Да. И это твой баг. Причём как в С++, так и в Дельфи. Потому что char* это совсем-совсем
не "аналогично UTF8String".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630450
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Ну тогда другой аналогии нету в Delphi. Придётся довольноствоватся пирогом который есть, раз Delphi разработчики не предусмотрели такой вариант.

Кстати, я вывел структуру и попытался из неё получить данные, в обход вызовов функций из сей.

Получилось только так (Надо было от указателя отнять -4 что бы он адекватно отобразил строку)

Код: pascal
1.
2.
3.
4.
function GetStr(z: Pzval): UTF8String;
begin
  result := PAnsiChar(NativeInt(@z.value.str.val) - 4);
end;



Типа val объявлен как Pointer


И провёл некоторое расследование, и выснилось что Delphi произвольно двигает строку на +4 с чего и был сделан вывод отнять 4.

Возможно если был включён 64 битный режим программы. Пришлось двигать на 8
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630473
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоНу тогда другой аналогии нету в Delphi. Придётся довольноствоватся пирогом который есть,
раз Delphi разработчики не предусмотрели такой вариант.

Да ну? Погуглить и найти System.UTF8Char и, соответственно, System.PUTF8Char это настолько
сложно для современных программистов?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630484
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

А какой смысл?

Код: pascal
1.
 PUTF8Char = PAnsiChar;
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630486
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоDimitry Sibiryakov,

А какой смысл?

Код: pascal
1.
 PUTF8Char = PAnsiChar;



А какой должен быть смысл, по-твоему?
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630518
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Смыл рекомендации, конечно - же, раз предлагают. А спроса нет, тот же тип - под другим именем.

Нет, он всё ещё делает то же самое что и старый, магие не произошло
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630522
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдочччД,

Смыл рекомендации, конечно - же, раз предлагают. А спроса нет, тот же тип - под другим именем.

Нет, он всё ещё делает то же самое что и старый, магие не произошло
Конечно, не произошло.

Все так же нужно читать учебники нубам....
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630602
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоИмеется функция с определением char* в c++ что аналогично UTF8String в DelphiНаиболее близко - это PAnsiChar или PShortInt.
char в си - это всегда 1 байт -128..127.
Можно привести к AnsiString - строка обрежется на 1-м нуле.
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630642
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут уже достаточно потыкали в нубство, дополню лишь наводящим вопросом: функция на c++ должна вернуть char*, как думаешь, какой тип в Delphi ему соответствует?

Про эффекты от выделения памяти в DLL и её последующего, судя по всему, неосвобождения пока не будем, пусть это станет сюрпризом
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630656
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock...
char в си - это всегда 1 байт -128..127.
...
Старый, ты щас снова насоветуешь.
Давно уже нет.
Более того, в C вообще: sizeof('a') == sizeof(int), а вовсе не sizeof(char).
В C++: sizeof('a') == sizeof(char). А за заявление, что sizeof(char) всегда == 1, канделябром.
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630735
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Если быть точным то так
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).
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630748
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоА какой смысл?

Всё дело в волшебных пузырьках compiler magic при неявных приведениях типов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630767
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

да, в C++: sizeof(char) == 1 (на сегодняшний день. :))
Но рассказывают, что есть компиляторы, у которых в байте не 8 бит, а 16 и 32, и Char такой же... Т.е., вернет тебе sizeof() единичку, а там жуть с рогами, а не 8 битный байт.
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630772
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДрассказывают, что есть компиляторы, у которых в байте не 8 бит, а 16 и 32, и Char такой же...

Это к гуглю с его ведроидом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630780
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovчччДрассказывают, что есть компиляторы, у которых в байте не 8 бит, а 16 и 32, и Char такой же...

Это к гуглю с его ведроидом.

Надо рассматривать конкретную ситуацию, а не пытаться универсальный код строчить.
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39630810
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДYuRock...
char в си - это всегда 1 байт -128..127.
...
Старый, ты щас снова насоветуешь.
Давно уже нет.
Более того, в C вообще: sizeof('a') == sizeof(int), а вовсе не sizeof(char).
В C++: sizeof('a') == sizeof(char).
Ну при чем тут константы. У нас же переменная - параметр функции.
чччД А за заявление, что sizeof(char) всегда == 1, канделябром.
Ну я не встречал обратных ситуаций. Может быть.
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39631050
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16.04.2018 13:24, чччД пишет:
> Надо рассматривать конкретную ситуацию, а не пытаться универсальный код строчить.

ведроид не нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UTF8String получение из c++
    #39631220
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строки выделяются и освобождаются на стороне dll-ки, всё работает как по маслу в общем сейчас, после такой конвертации..

З.ы проблема случалась только в случае такого описания как char val[1];


К слову, возбуждёному уму Siemargl. Смысл читать про каждый тип в отдельности? Когда можно просмотреть его исходную часть, конечно же если он неявляется частью компилятора.

А читать отрасаль разновдиностей одних и тех же типов (Из за говнокодерства, и непривязни использовать уже существущие - превратившись всё в маразм и тяжёлый груз) Это уже будет человек с мало понимающим, что такое программировать и как оно просиходит. А я программист со стажем 6 лет, на сях.. Просто заказ интересный пришёл на пару десятков, сделать полноценное подключение пыхи к дельфи, с последующим процентом заработка в добавок от проекта. Что конечно же, будет по корману в самый раз.

Ну а на дельфи я программирую 2 дня.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / UTF8String получение из c++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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