|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Добрый день. Есть длл, написанная на DelphiXE. В ней есть функция Код: pascal 1. 2.
В консольном приложении Делфи2007 делаю обёртку и вызов Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
На строке Len := GetLastLogText(__MaxSize, Buffer); Просто вываливается ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 12:23 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
LadyShack Код: pascal 1.
LadyShack Код: pascal 1.
То есть это совсем не смущает? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 12:35 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
wadman, Не смущает, потому как такой вариант тоже был, результат тот же Код: pascal 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 12:41 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
LadyShack, Выставьте обеих сторон PAnsiChar, не томи уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 12:47 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Vlad F, повторю предыдущий пост, что такая реализация тоже была, результат тот же Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 12:52 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
LadyShackтакая реализация тоже была, результат тот же А ничего, что в 2007-й был кривой NativeInt, не соответствующий позднейшим версиям?.. А ничего, что у вас в вызове Copy идёт выход за пределы буфера?.. Вы вообще свой код отлаживать до уровня ассемблера пытались или сразу перешли на пляски с бубном? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 12:58 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я показала, что было два варианта и integer и NativUInt. Почему вы решили, что Buffer выходит за размер? А потом до строки с копированием дело не доходит, рушится на вызове. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 13:24 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
LadyShackя показала, что было два варианта и integer и NativUInt. Вы показали, что меняли типы от балды. Вполне могли сменить правильный вариант на неправильный. LadyShackПочему вы решили, что Buffer выходит за размер? Потому что элементы массива символов (в отличии от строк) нумеруются с нуля. И, строго говоря, Copy() к ним вообще применять нельзя. LadyShackрушится на вызове. Почему Вы так думаете? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 13:34 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Проблема разрешилась. Необходимо переопределить NativeUInt. В Делфи2007 размер NativeUInt равен 8 байт, а в ДелфиХЕ для win32 размер NativeUInt равен 4 байта. Код: 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69.
Dimitry SibiryakovПотому что элементы массива символов (в отличии от строк) нумеруются с нуля. Копирование произвелось корректно, съедание начального символа не было. Так что это предположение не верно ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 16:59 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
LadyShack Проблема разрешилась. Необходимо переопределить NativeUInt. Особенно смешно будет если ты заюзаешь этот юнит где не надо. А чего просто integer не взять, а? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 17:32 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
LadyShackКопирование произвелось корректно, съедание начального символа не было. Это, увы, из разряда "дуракам везёт": Дельфи автоматически преобразовала указатель в строку и код не упал только потому, что терминируюший нуль случайно оказался в пределах читабельного адресного пространства. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2021, 19:21 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Из https://github.com/Fr0sT-Brutal/Delphi_Compilers {$IF DEFINED(RAD_XE2_UP)} // NativeInt, NativeUInt are fixed? {$DEFINE CAPS_NATIVEOK} {$IFEND} соответственно $ifndef CAPS_NATIVEOK type NativeInt = {$IFDEF CPU386} Int32 {$IFDEF CPUX64} Int64 скобочки и прочее лень расставлять ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 13:51 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Да сколько ж можно. Не используйте в 2021 году тип P(Ansi)Char для передачи строк из/в DLL - используйте WideString . Сейчас не 1995 год. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 10:25 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
GunSmoker Да сколько ж можно. Не используйте в 2021 году тип P(Ansi)Char для передачи строк из/в DLL - используйте WideString . Сейчас не 1995 год. Я его применяю для utf8 строк при общении с питоном, где очень вряд ли есть виндовые widestring. Да и в *nix, как я понимаю, в основном utf8. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:22 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Речь идёт про проектирование API для своих DLL. Причём тут питон и любые другие "не свои" API? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:08 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
GunSmoker, С точки зрения производительности (вдруг функцию нужно 100500 раз вызвать из dll), WideString проигрывает указателям. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 19:39 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
zedxxx GunSmoker, С точки зрения производительности (вдруг функцию нужно 100500 раз вызвать из dll), WideString проигрывает указателям. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 09:15 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
asutp2, Нет, тестов нету. Но с давних времён как-то остался негативный опыт с WideString и я их теперь предпочитаю обходить стороной. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 10:40 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Хотя, дело было точно ещё до юникодных версий Delphi, так что если и в dll и в exe использовать юникодную версию, то оверхеда на создание/уничтожение промежуточной WideString не будет и всё окажется не так печально. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 10:57 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
Если на каждую итерацию выделять-уничтожать строки, а указатели - нет, то конечно проиграет :). Насчет равных условий не уверен: возможно, системный вызов потяжелее родного менеджера памяти, но вряд ли намного. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 12:30 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
WideString - очень медленная штука в сравнении с string, PChar... Но для некоторых случаев удобная ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 19:24 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
zedxxx С точки зрения производительности (вдруг функцию нужно 100500 раз вызвать из dll), WideString проигрывает указателям. Преждевременная оптимизация - корень всех бед. Если у тебя базилион вызовов, то как бы и String надо убирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2021, 16:05 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
zedxxx GunSmoker, С точки зрения производительности (вдруг функцию нужно 100500 раз вызвать из dll), WideString проигрывает указателям. С точки зрения проектирования API, а как правило и с точки зрения производительности, обычно лучше использовать родной (для соответствующей версии Delphi) тип String. WideString имеет смысл использовать только в том случае, если пишешь на Delphi плагин для приблуды, написанной на чём-то другом (хотя само по себе это уже вряд ли хорошая мысль). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2021, 16:37 |
|
вызов длл написанную на DelphiXE из системы на Delphi2007
|
|||
---|---|---|---|
#18+
softwarer (хотя само по себе это уже вряд ли хорошая мысль). Чойта? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2021, 17:57 |
|
|
start [/forum/topic.php?fid=58&msg=40091486&tid=2037081]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 275ms |
total: | 432ms |
0 / 0 |