|
|
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
makhaonвключи range check,Мы сейчас говорим о корректности обращении к символу строки за пределами ее длины или о физическом состоянии памяти? makhaonподсказка: UStrToPWChar. Код: pascal 1. 2. 3. 4. 5. 6. 7. и что я должен был тут увидеть? То, что просто возвращается указатель на строку? Которая, внезапно, оказывается нуль-терминатной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2019, 19:48 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, в документации описано про гарантированный ноль в конце строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2019, 20:07 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
makhaonв документации описано про гарантированный ноль в конце строки?Например вот http://docwiki.embarcadero.com/RADStudio/Tokyo/en/String_Types_(Delphi) You can also cast a UnicodeString or AnsiString string as a null-terminated string. The following rules apply: If S is a UnicodeString, PChar(S) casts S as a null-terminated string; it returns a pointer to the first character in S . Such casts are used for the Windows API. For example, if Str1 and Str2 are UnicodeString, you could call the Win32 API MessageBox function like this: Код: pascal 1. Use PAnsiChar(S) if S is an AnsiString. You can also use Pointer(S) to cast a string to an untyped pointer. But if S is empty, the typecast returns nil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2019, 23:21 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
а я видел строки без /0 и с /0 посередине )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 09:12 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
cptngrbа я видел строки без /0 и с /0 посередине )) вот прямо string без завершающего нуля? это, наверно, ошибка в программе была. Delphi всегда выделяет памяти на символ больше длины строки и пишет 0 в лишний символ. В самой строке нулей может быть сколько угодно, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 10:15 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
RWolf, конечно ошибка, но я то думал, что такого не бывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 10:20 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
makhaon_Vasilisk_, авторА как, по твоему, работает привидение к PChar? чудом, не иначе включи range check, узнаешь много нового. никакого нуля сзади строки нет. Есть makhaonну и посмотри как приведение работает. подсказка: UStrToPWChar. А ты сам смотрел как работает UStrToPWChar? Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 10:22 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
ок, уговорили, черти красноречивые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 12:01 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
cptngrbа я видел строки без /0 и с /0 посередине ))И что? Это не противоречит тому, что строка оканчивается \0 Вот при касте к PChar такой строки она обрежется до серединного \0. Вернее, если принимающая сторона считает длину строки по завершающему \0, то она прочитает только часть строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 14:34 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, вы категорично заявляли, что заканчивается 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 16:31 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Вот при касте к PChar такой строки она обрежется до серединного \0. Вернее, если принимающая сторона считает длину строки по завершающему \0, то она прочитает только часть строки вот и приходилось нолик игнорировать в середине ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 16:33 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
cptngrb_Vasilisk_, вы категорично заявляли, что заканчивается 0.да, заканчивается, но это никак не исключает, что нулей может быть больше одного, завершающего "Те кто говорят, что у Кутозова не было одного глаза, нагло врут. Один глаз у него был!!!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2019, 17:06 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
SQL-Talker, товарищ! Не слушай некоторых тут, они давно не чистили лук на подводной лодке . Читай сюда: Разработка API (контракта) для своей DLL или: не создавайте своих DLL, не прочитав эту статью! . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2019, 22:37 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
makhaon никакого нуля сзади строки нет Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Включаем отладчик, попадаем в функцию Код: pascal 1. Из неё попадаем в Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. От сюда видим Код: pascal 1. Идём дальше, и проверяем PAnsiChar И в конечном итоге попадаем на выделение строки Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Где опять же видим Код: pascal 1. Чудом, не иначе AnsiString type Код: pascal 1. Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. [/SRC] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2019, 00:38 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
shonli95, Явного нуля в конце строки нет. Текущая частная реализация. Можно, конечно, заложиться. Но внезапно поменяется завтра что-то - и всё посыпется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2019, 15:15 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2019, 15:37 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
makhaon, есть, это легко проверить. Когда ты пытаешься вывести строку, она конвертируется не на стадии присвоения string к PWideChar а на выводе. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. При вызове Writeln приведёт к тому, что строка будет скопирована Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. И при создании данной строки, будет создана новая строка _NewUnicodeString -> Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Где на конце, располагается символ конца строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 10:06 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
GunSmokerЧитай сюда: Разработка API (контракта) для своей DLL или: не создавайте своих DLL, не прочитав эту статью! . Мне кажется, или там ошибка в разделе "Выделенные функции"? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 11:24 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
alekcvp, может у меня глаз замылился, в чём там вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 12:49 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
alekcvp, Да там легко можно узнать выделенный размер блока, и функции для освобождения этим и пользуются по умолчанию. Это вам не delphi с его крутым менеджером К примеру Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Имеет GetSize, но Free не принимает второго аргумента, что бы удалить определённое количество. Так же и там. Майки не дают делать программисту - то, что ему не нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 13:53 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
GunSmokeralekcvp, может у меня глаз замылился, в чём там вопрос? В том, что память выделяется через GetDynData(), а освобождается через CoTaskMemFree(), вместо FreeDynData() (или как там). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 14:37 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
alekcvp, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Идём на сайт https://docs.microsoft.com/en-us/windows/desktop/api/combaseapi/nf-combaseapi-cotaskmemalloc Видим, что это аналог IMalloc::Alloc видим, что освобождение идёт через CoTaskMemFree что аналогично IMalloc::Free Ну а ваще Ок Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 15:27 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
GunSmoker Код: pascal 1. 2. 3. 4. 5. Это ведь означает лишние _AddRef/_Release на каждый вызов функции, разве нет? в чём выгода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 16:34 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
авторНе нужно делать реализацию методов интерфейса виртуальными:Бред. Если методы будут в дальнейшем переопределяться, то они должны быть виртуальными авторНе помечайте интерфейсные параметры модификатором const:с какого перепугу? Наоборот, они должны быть всегда c const, чтобы не дергать счетчик ссылок автор Код: pascal 1. 2. Идея красивая. Но импортер Delphi не умеет импортировать Код: plaintext 1. в Код: pascal 1. . А каждый раз руками править замучаешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 17:51 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_с какого перепугу? Наоборот, они должны быть всегда c const, чтобы не дергать счетчик ссылок Вангую, это такая соломка от: Код: pascal 1. тут без явной ( as ) передачи интерфейса будет утечка, если интерфейсный параметр является константным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 18:09 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39824854&tid=2039273]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 534ms |

| 0 / 0 |
