|
|
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyВангую, это такая соломка от:Зато будет сюрприз Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. У себя всегда пишу так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 18:58 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Зато будет сюрприз А так не будет: Код: pascal 1. Тут уж, либо с интерфейсами работаем, либо вручную объектами управляем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 19:23 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
shonli95alekcvp, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Я же специально указал раздел "выделенные функции", там в dll другой код - найдите тут CoTaskMemAlloc: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И текст из статьи, цитирую: Другой вариант - обернуть ваш предпочитаемый менеджер памяти в экспортируемую функцию. Соответственно, в документации к функции должно быть указано, что для освобождения памяти нужно вызывать не CoTaskMemFree (или что вы там использовали), а вашу функцию-обёртку . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 19:32 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
alekcvp, Всё - всё, понял - понял) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2019, 20:13 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
alekcvp, спасибо, исправил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 03:03 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_с какого перепугу? У меня под конец уже время закончилось, я уж не стал расписывать, тем более, что в блоге и так было. Так да, это "защита от дурака". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2019, 03:12 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
В статье про DLL предлагается использовать BSTR получения/передачи строковых данных. Пытаюсь в DLL, написанной в Delphi, возвращать строковое значение из функции в WideString (он же BSTR), но получается ерунда. Если DLL вызывать из программы написанной в Delphi то все хорошо, если вызывать из C++, то получаем ошибку "Out of memory". Код DLL: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Вызов DLL из Delphi (все работает): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Вызов из C++ (ошибка "Out of memory"): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Что тут не так? Почему не работает? Или идея с BSTR не совсем рабочая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 11:04 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
SQL-Talker, а так пробовал? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 12:01 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), При таком варианте, компилятор выдает ошибку на строке вызова функции: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 13:51 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
Импорт должен быть таким Код: plaintext 1. Ссылку на документацию найти не могу, но для сложных возвращаемых типов (строки, записи, массивы) в Delphi функция превращается в процедуру с последним var параметром. Т.е. это SQL-Talker Код: pascal 1. компилятор превращает в это Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 16:18 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
GunSmokeralekcvp, спасибо, исправил. GunSmoker, подкорректируйте плиз тогда и глобальный пример, который у вас приложен к статье :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 16:58 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Заработало! Спасибо)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 17:06 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
SQL-Talker, лучше уж тогда safecall заюзать, однотипно будет хоть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 17:10 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), stdcall - требование заказчика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 17:31 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
SQL-Talker, да это и есть тот же stdcall, только результат функции всегда один и тот же тип ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 18:13 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), stdcall и safecall - это не одно и тоже. При safecall результат возвращается в параметрах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 19:32 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
ziv-2014, а при stdcall это невозможно? :-) абсолютно тот же stdcall, только результат функции всегда HResult ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2019, 20:08 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
Правильно ли я понимаю, что для функции типа Код: pascal 1. В C++ импорт должен быть таким: Код: plaintext 1. Пробую так делать - вылетает ошибка при выполнении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 09:22 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
SQL-Talker, я бы предложил взять idl-ку какую ни будь из SDK как шаблон - компиляция там простая, и извращаться там (т.е. описывать всё на одном языке). Для Delphi и fpc тоже консолька импорта в pas есть. Так вы сможете понять как это будет выглядеть на других языках. Ну и конечно safecall, он удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 09:39 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
SQL-TalkerПравильно ли я понимаю, что для функции типа Код: pascal 1. В C++ импорт должен быть таким: Код: plaintext 1. Пробую так делать - вылетает ошибка при выполнении. Так должно быть Код: pascal 1. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 14:46 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
SQL-Talker, Лучше переходи на интерфейсы (interface), так больше возможностей получаешь. Получаешь типа такого на си++: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Делфи: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Красота :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 14:51 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
SQL-TalkerПробую так делать - вылетает ошибка при выполнении.Проверь sizeof(BOOL) в Си и Делфи. А лучше использовать типы с явным размером. Например, WordBool SQL-Talker- вылетает ошибка при выполнении.Где? Какая ошибка? ziv-2014Так должно бытьНе должно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:01 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
ziv-2014, кстати, вполне вариант, условия на статик линковку у него вроде нет, судя по тому что он динамически грузит функцию загрузил одну функцию возвращающую интерфейс и всё интерфейс в idl описал для надёжности, лепота... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:32 |
|
||
|
DLL - Написать DLL, в ней функцию, которая возвращает массив записей.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, И в Delphi и в C++ sizeof(BOOL) = 4 Вот исходники: Delphi DLL: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 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. 29. 30. 31. 32. 33. При выполнении си-шного кода, спотыкается об строку вызова функции из DLL и выдает в консоль "Process returned -1073741819 (0xC0000005)" Это если из IDE запускать (Code::Blocks), а так молча завершается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 15:50 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39836455&tid=2039273]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
148ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 444ms |

| 0 / 0 |
