|
|
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
Привет всем. Дёргаю из Delphi (10.3) приложения dll-кy написаную на FPC (3.х.х). Передать String параметри В dll знаю как, но как обратно получить String? Примерно так на Delphi: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Примерно так на FPC: Код: pascal 1. 2. 3. 4. 5. Что тук и как правильно делать? Или хотябы как сделать процедуру где что то возврашается через входные параметри: "Var Argument :PWideChar" ? WBR Janex ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2019, 09:23 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
И туда и обратно нужно делать через выделенный заранее буфер, который уничтожается после вызова процедуры/функции. Как это сделано в windows api. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2019, 09:30 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
Janex, Используй widestring и передавай в параметрах функции, и никогда не передавай в результате функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2019, 09:47 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
JanexПривет всем. Дёргаю из Delphi (10.3) приложения dll-кy написаную на FPC (3.х.х). Передать String параметри В dll знаю как, но как обратно получить String? ... String - нельзя. Разные менеджеры памяти, возможно - разные реализации строк. В функцию передавай указатель на буфер (PChar, например), в который функция должна упаковать результат. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Или пусть буфер создается в dll, но тогда и dll пусть экспортирует функцию, освобождающую память буфера. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2019, 10:45 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
WinAPI отличный пример для подражания. Есть как предвыделенные вызывателем буферы, так и выделение DLL-ю с последующим обязательным освобождением. Также есть режимы, возвращающие необходимую длину буфера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2019, 10:55 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
Вот как раз с WideString все хорошо: достаточно использовать SysAllocString ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2019, 13:13 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эра, Всё вроде как работает, спасибо, но некак немогу понять как и что в FPC делать чтоб в дельфовскии екзешник передать юникод, типо UTF8. Вот FPC: Код: pascal 1. 2. 3. 4. 5. 6. 7. Delphi екзешник: Код: pascal 1. 2. 3. 4. 5. 6. Там где "Test test" там всё прекрасно, а остальное крякобразы :( Как правильно сморматировать, передать и отобразить UTF8 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2019, 20:46 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
Janex, ну ты блин даешь. Отдаешь utf8 строку, а хочешь, чтобы она стала utf16. Сама собой она не перекодируется. Перекодируй сам. Или в dll, или в exe. Например, http://wiki.freepascal.org/Unicode_Support_in_Lazarus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2019, 21:26 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
Janex, Код: pascal 1. Я не уверен в правильности такого кода. Длина символа utf8 составляет от 1 до 4 байт: https://ru.wikipedia.org/wiki/UTF-8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2019, 21:28 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эра, Не бойся, больше 2 негров ещё нигде не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2019, 00:55 |
|
||
|
Возврат String из FPC dll
|
|||
|---|---|---|---|
|
#18+
Фэйтл ЭраJanex, Код: pascal 1. Я не уверен в правильности такого кода. Длина символа utf8 составляет от 1 до 4 байт: https://ru.wikipedia.org/wiki/UTF-8 В данном случае это нормально. Length(Utf8String) считает в байтах, а не символах JanexТам где "Test test" там всё прекрасно, а остальное крякобразы :( Как правильно сморматировать, передать и отобразить UTF8 ? Result := string(Utf8String(S)); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2019, 10:14 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39758273&tid=2039925]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 477ms |

| 0 / 0 |
