|
|
|
Написание UDF для PostgreSQL под Windows на Delphi
|
|||
|---|---|---|---|
|
#18+
Привет всем. PostgreSQL 9.4.5 32 bit под Windows. Потребовалось написать UDF. Т.к. C не владею, решено было использовать Delphi. В документации упоминается обязательность наличия магического блока PG_MODULE_MAGIC. Для обеспечения его наличия портируем в Delphi из модуля fmgr.h описание структуры: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И реализуем экспортируемую функцию Pg_magic_func, которая по сути является сигнатурной и без нее подключить DLL не получится: Код: pascal 1. 2. 3. 4. 5. 6. 7. Модуль pg_config.h содержит значения, которыми заполняем поля типизированной константы Pg_module_magic_data. Думаю, от версии к версии их значения могут отличаться. Далее реализуем собственно UDF: Код: pascal 1. 2. 3. 4. 5. 6. В моеv случае требовалась передача а UDF одного строкового параметра. В DLL тип параметра указывается pAnsiChar, а в PostgreSQL - cstring. Собственно, заготовка для написания 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. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Для регистрации UDF запускаем скрипт: Код: plsql 1. 2. 3. 4. 5. Собственно, это все. Буду признателен, если кто укажет на ошибки и несоответствия. С уважением, Polesov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 22:31 |
|
||
|
Написание UDF для PostgreSQL под Windows на Delphi
|
|||
|---|---|---|---|
|
#18+
Ошибся: в объявлении функции первым указывается имя модуля my_first_dll , затем экспортируемое имя функции my_first_udf Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 22:38 |
|
||
|
Написание UDF для PostgreSQL под Windows на Delphi
|
|||
|---|---|---|---|
|
#18+
так заработала dll или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:07 |
|
||
|
Написание UDF для PostgreSQL под Windows на Delphi
|
|||
|---|---|---|---|
|
#18+
uranic, заработала. Но я не разобрался в соглашениях о передаче параметров другого типа, например при объявлении в postrges тип параметра как varchar в UDF передается значение в виде 4-байтового integer, за которым следует собственно текстовое значение. Величина в 4-х байтовом integer не соответствует длине передаваемого в UDF текста, и сам текст не заканчивается ASCIIZ. В общем, еще предстоит разбираться. Но при объявлении типа как cstring все передается корректно. С уважением, Polesov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 14:59 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39150693&tid=1997507]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 509ms |

| 0 / 0 |
