|
|
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
по работе необходимо часто просматривать содержимое файлов запросов на сертификат и сертификатов ЭП(электронной подписи). Написал программу для этого и на основе её плагин для тотал коммандера. Писал на Delphi 7 и дублировал на lazarus. Приложение понятное дело - 32-битное. Ну вот захотелось плагин сделать для 64-битного тотал коммандера. Естественно сразу наткнулся на грабли : приложение скомпилировалось (на lazarus64) но функции cryptoapi перестали работать. По-гуглив, изменил тип используемых переменных dword и cardinal на dword_ptr. Функции cryptoapi заработали. Но немогу решить проблему в этом коде: На 32 бит работает такое: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. а на 64 бит нет. первый [0].pszObjId элемент массива видит, а при обращении к [1].pszObjId ошибка cannot access memory at address а обращение к CERT_EXTENSIONS(pCertContext.pCertInfo.rgExtension)[i]. fCritical ошибок не вызывает. Код: pascal 1. может для 64 бит тут надо другой тип? немогу найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 13:34 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81может для 64 бит тут надо другой тип? Сравни Sizeof в 32 и в 64 бита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 13:51 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
wadmanalexer81может для 64 бит тут надо другой тип? Сравни Sizeof в 32 и в 64 бита. да разный Код: pascal 1. 2. 3. 4. 32 бит - 4 64 бит - 8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 14:09 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81, тебе намекают на неверный размер CERT_EXTENSION из-за ошибочного выравнивания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 14:18 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
GunSmokeralexer81, тебе намекают на неверный размер CERT_EXTENSION из-за ошибочного выравнивания. Не понимаю что это означает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 14:27 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81GunSmokeralexer81, тебе намекают на неверный размер CERT_EXTENSION из-за ошибочного выравнивания. Не понимаю что это означает. Это значит, что нужно сравнить размер GunSmokerневерный размер CERT_EXTENSION из-за ошибочного выравнивания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 14:28 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
проверил каждый элемент массива 32 бит - CERT_EXTENSION[i] -16 64 бит - CERT_EXTENSION[i] -28 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 14:37 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer8132 бит - CERT_EXTENSION[i] -16 64 бит - CERT_EXTENSION[i] -28 Многовато, должно быть на 8 байт больше, а не на 12, потому что только два указателя в структуре. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 14:47 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer8164 бит - CERT_EXTENSION[i] -28 Есть мнение, что должно быть 32, ибо 28 на 8 не делится. У тебя выравнивание записей на 4 байта, а должно быть на 8 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 14:48 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81может для 64 бит тут надо другой тип? немогу найти. LPSTR = PAnsiChar; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 14:57 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
да получается что в pCertContext.pCertInfo.rgExtension не то что надо(или неполностью) 32 бит sizeof(pCertContext.pCertInfo.rgExtension^)=16 64 бит sizeof(pCertContext.pCertInfo.rgExtension^)=28 CertFindExtension тоже не находит расширения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 15:09 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
32 бит 64 бит sizeof(pCertContext^.pCertInfo^.rgExtension^.fCritical) 4 4 sizeof(pCertContext^.pCertInfo^.rgExtension^.pszObjId) 4 8 sizeof(pCertContext^.pCertInfo^.rgExtension^.Value) 8 16 есть мысли где неправильно? и почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 16:14 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. У меня x32=16, x64=32 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 17:34 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81, не работает конкретно в wlx-плагине или в обычном приложении тоже? сделал тестовое приложение в Lazarus версии 1.6.2, всё нормально работает. случайно не используете модуль-огрызок Wcrypt2.pas ? В лазарусе имеется JwaWinCrypt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 18:18 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81Не понимаю что это означает. в таком случае, увы, тебе едва ли стоит САМОМУ заниматься самостоятельным использованием DLL, пока не поймешь. потому что это стандартная грабля с переносом структур данных между языками, когда компилятор ничего не может проверить и доверяет человеку абсолютно. И тут тебе повезло, что ошибка была такая грубая, что программа мгновенно вылетела. А если бы ошибка была тоньше, то она могла бы внешне не проявиться и только втихую портить данные, несколько месяцев или лет.... ------------- Как вариант, для Delphi есть JEDI Win API Translation and Crypto API Library К сожалению, проект полузаброшенный, поэтому разобраться какую версию ставить ( 2.3 / 2.4. , с сайта или с SVN ) можно только методом тыка. Тупо включаешь эти модули в проект - и они не компилируются. Но простейшие WinXP+ Crypto функции в Delphi XE2 Win32 работают. Когда заставишь скомпилироваться. Это тем более удобно, что ЕМНИП в разных версиях Windows функции расположены в разных DLL. Но я не пробовал её в Delphi x64 и не знаю, насколько оно совместимо. А если совместимо с Delphi x64 - ещё не факт что с ней совместим будет FPC x64 И всё же - попробовать использовать уже сделанное - вполне себе вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 19:51 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
Ghost Writeralexer81, не работает конкретно в wlx-плагине или в обычном приложении тоже? сделал тестовое приложение в Lazarus версии 1.6.2, всё нормально работает. случайно не используете модуль-огрызок Wcrypt2.pas ? В лазарусе имеется JwaWinCrypt. да пилю напильником Wcrypt2.pas. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 09:17 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
к сожалению те примеры которые попадались не работали c JwaWinCrypt. и я закопался в Wcrypt2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 09:23 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81к сожалению те примеры которые попадались не работали c JwaWinCrypt. и я закопался в Wcrypt2 alexer81, Потрать немного времени и вернись лучше обратно на JwaWinCrypt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 09:29 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
sql2012alexer81к сожалению те примеры которые попадались не работали c JwaWinCrypt. и я закопался в Wcrypt2 alexer81, Потрать немного времени и вернись лучше обратно на JwaWinCrypt. да действительно lazarus 1.6.2 c использованием JwaWinCrypt код работает нормально. а вот времени придется потратить много чтобы перейти на JwaWinCrypt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 16:21 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81, Ghost Writer Ребят, а не поделитесь кодом для wlx-plugina в Lazarus под Win64? Интересует пример инициализации LCL и последующего создания экземпляра формы именно для 64 бит. Уже долго мучаюсь - не могу собрать wlx-plugin для 64-х битного TotalCommander-а. Для 32-х битного TotalCommander-а работает пример из сети, а на 64 - падает. Вот мой код проект: Код: 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. форма: Код: 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. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 16:51 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
wlx-plugin Код: pascal 1. нет такого типа! есть PAnsiChar, есть PWideChar в общем - надо смотреть документацию, в какой конкретно кодировке приходят и уходят эти строки ЕМНИП в FPC нынешнем строки вообще UTF-8, то есть не сопадают ни с одним из вариантов string/char/pchar в Deдphi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 18:17 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
alexer81Ghost Writeralexer81, не работает конкретно в wlx-плагине или в обычном приложении тоже? сделал тестовое приложение в Lazarus версии 1.6.2, всё нормально работает. случайно не используете модуль-огрызок Wcrypt2.pas ? В лазарусе имеется JwaWinCrypt. да пилю напильником Wcrypt2.pas.напильник драчевый ? попробовал подкинуть Wcrypt2.pas в лазарус - 70 ворнингов типа Wcrypt2.pas(8441,1) Warning: Comment level 3 found и fatal error ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 22:19 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
вот морока теперь.. есть системный(или как это называется незнаю) тип TFileTime(описан в Struct.inc) и в JwaWinType зачем-то определен TFileTime. компилятор говорит что это не одно и тоже. А я ранее преобразовывал дату через FileTimeToSystemTime Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. FileTimeToSystemTime нужен TFileTime из в Struct.inc а у меня есть pCertContext^.pCertInfo^.NotBefore - TFileTime из JwaWinType как их состыковать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 22:32 |
|
||
|
перевод приложения на 64 бит
|
|||
|---|---|---|---|
|
#18+
авторнапильник драчевый ? попробовал подкинуть Wcrypt2.pas в лазарус - 70 ворнингов типа Wcrypt2.pas(8441,1) Warning: Comment level 3 found и fatal error я им с 2012 пользуюсь. и за это время многое подправил и добавил. на 32 бита прекрасно всё работало. Один модуль для Delphi7 и Lazarusa ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 22:37 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=91&tid=2040185]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 322ms |

| 0 / 0 |
