|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Есть DLL. исходник на С++ Код: plaintext 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.
исходник на Делфи Код: 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.
Как правильно в РВ вызывать эти функции? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2017, 17:37 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Продолжу. Есть пример решения . исходник С++ Код: plaintext 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.
частично перевел на РВ Код: sql 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.
Кто то может подсказать как фрагмент "обращение к объекту модуля активации" в примере перевести на РВ? Или может есть другой вариант решения? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2017, 12:09 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
10.12.2017 17:37, AIS пишет: > Как правильно в РВ вызывать эти функции? Никак. А тому, кто экспортировал из DLL класс, нужно забить в голову гвоздь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2017, 12:32 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Dim200010.12.2017 17:37, AIS пишет: > Как правильно в РВ вызывать эти функции? Никак. А тому, кто экспортировал из DLL класс, нужно забить в голову гвоздь. А кроме "гвоздя" что-то ещё посоветуете? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2017, 14:03 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Совет стандартный - написать "обертку" на С++, которую можно подцепить в билдер. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2017, 18:41 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
11.12.2017 14:03, AIS пишет: > А кроме "гвоздя" что-то ещё посоветуете? )) Я не совсем понимаю, почему это работает в Дельфи (хотя догадка имеется), а вы хотите, чтобы я знал, как это заставить работать в эхотаге... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2017, 11:58 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Dim2000Я не совсем понимаю, почему это работает в Дельфи (хотя догадка имеется), а вы хотите, чтобы я знал, как это заставить работать в эхотаге... Вы точно не из Москвы, а скорее из Одессы...))) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2017, 17:00 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Dim2000Я не совсем понимаю, почему это работает в Дельфи (хотя догадка имеется), а вы хотите, чтобы я знал, как это заставить работать в эхотаге... Работает потому что классы в дельфи специально сделаны бинарно совместимыми с COM интерфейсами Винды. А COM-интерфейсы это и есть классы С++ с виртуальными функциями . Dim2000Никак. А тому, кто экспортировал из DLL класс, нужно забить в голову гвоздь. Плюсую )) ЗЫ. AIS, пишите обертки на С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 15:58 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, я уже так и понял, что вариантов других нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 18:28 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Вроде сделал тестовую "обертку". Все работает, кроме вызова одной функции, у которой в параметрах структура. Выдает ошибку (-1) некорректный вызов. функция GetState в исходнике Код: plaintext 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.
Как эту функцию (GetState) правильно вызвать и принять структуру с результатом выполнения? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2018, 23:46 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
AIS, Среды ПБ у меня нет, так что написать из головы как должно быть не могу. Приведите код который сейчас есть (выдающий ошибку). Я подскажу что поправить (если увижу в чем проблема). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:59 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Ну, вот вроде, что нужно было имею в dll-обертке. А как быть с подключением к БД в частности через Odbc? Логичней было бы сразу в dll-обертке после установки ключа доступа к БД сразу и подключиться (сделал работает), но как тогда это подключение использовать в РВ не пойму? С другой стороны после установки ключа не удалять его, а подключение сделать в РВ (тоже работает), но тогда ключ остается активированным до конца работы приложения, что как мне кажется небезопасно. Может кто что посоветует или направит мысли в нужное русло, как правильней подключаться к БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 13:11 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Есть еще один вопрос. Из РВ вызываю из dll-обертки функцию test(), все работает: C++ Код: plaintext 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.
Хотелось бы ещё вывести массив key из dll в РВ и передавать его в качестве параметра функции test(). Как задать в РВ такой массив и правильно его передать в dll? P.S. буксую ещё на sizeof(). Может этот параметр тоже надо (лучше) формировать в РВ и передавать ввиде параметра в dll? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 17:44 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
AIS, Для массивов байтов удобно пользоваться типом blob. Аргумент внешней функции объявить ref blob Размер естественно надо передавать еще одним аргументом (long) Вместо blob можно попробовать массив byte ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2018, 12:25 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
См также как создавать блоб из произвольных байтов - 2634026 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2018, 12:54 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky , спасибо за советы, помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2018, 00:56 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Совет стандартный - написать "обертку" на С++ ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 15:16 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Вроде уже собрал тестовую dll-у, и вроде уже все работало и в среде РВ, и в ЕХЕ-файле, но оказалось, что только на том ПК (Win7/64), где собирал (Dev-C++). Собрал аналогичное в PBNI на (Microsoft Visual Studio Express 15), ситуация такая же. т.е. перехожу для теста на другой ПК (WinXP/SP3) и приложение выдает ошибку, что неправильный вызов внешней функции и закрывается. Код: plaintext 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.
Добавлял уже для WinXP и: Код: plaintext 1.
и устанавливал: Код: plaintext 1.
Все равно программа доходит до той же точки на ПК, где WinXP, и падает :( Где ошибка? В общем, как побороть этот пример для WinXP? ( исходники примера ) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2018, 15:47 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
AIS, Скорее всего не хватает рантайма VS - msvcrtXXX.dll и зависимости. Его начиная с VS2005 надо устанавливать (или копировать .dll из него) вместе с откомпилированной в студии программой. Подробности не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2018, 20:38 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, с одной стороны, тоже так думал и думаю, но с другой, созданные в 1-ом случае dll и во 2-ом pbx в целом работают. Делал сборку с ключом /MD, но не помогает. Может этого не достаточно и надо ещё что то настроить в свойствах проекта? ПС. А вообще программа запускается на WinXP, все созданные функции в двух вариантах работают, ПО не падает и ошибок не выдает. А вот при обращении к классу и виртуальным функциям из сторонней dll программа на WinXP падает, но не сразу, а на каком то этапе. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2018, 09:43 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
Да, забыл ещё отметить, что ранее собирал программки на РВ10.5 (W7/64) и они работали в т.ч. и на WinXP, где в каталоге программы была msvcr 71 .dll, а уже эта тестовая программка запросила msvcr 100 .dll. Конечно заменил и программа заработала частично, но старые программы так же и работают со старой msvcr 71 .dll на тестируемом ПК. От чего так? Может от того, что на рабочем ПК установил "Microsoft Visual Studio Express 15" и теперь появилась такая проблема с WinXP? Одним словом, почему программа на РВ10.5 не довольствуется теперь своей стандартной msvcr 71 .dll, а требует другую msvcr 100 .dll? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2018, 11:50 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
У DLL, к которой подключаюсь динамически, если я правильно понял, оказывается стоят параметры сборки: Required OS version 6.00 Subsystem version 6.00 т.е. на WinXP её экспортируемые функции работать не будут. Наверное это и есть причина, что на определенном этапе после загрузки dll и вызове экспортируемой функции программа на WinXP падает, я правильно понимаю? Какое то решение есть для такой ситуации? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 16:38 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
06.08.2018 16:38, AIS пишет: > Какое то решение есть для такой ситуации? Наконец-то забить на XP. Вполне разумно в 2018 году. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 12:39 |
|
Как вызвать функцию в DLL
|
|||
---|---|---|---|
#18+
AISКакое то решение есть для такой ситуации? Собирать dll в более старом компиляторе который поддерживет xp. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 16:51 |
|
|
start [/forum/topic.php?fid=15&msg=39609261&tid=1335107]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 182ms |
0 / 0 |