Создание функций в PostgreSQL 9.1 в среде Windows

Я создал dll файл в visual studio 2010 и я пытаюсь использовать это dll в PostgreSQL 9.1 чтобы создать функцию, но я получаю эту ошибку:

ERROR:  incompatible library "D:\visual_studio\DynamicLibrary\x64\Debug\funxx.dll":
missing magic block

HINT:  Extension libraries are required to use the PG_MODULE_MAGIC macro.

я использую 64bits windows.i проверил документацию PostgreSQL около C Языковые функции и динамическая загрузка, и это говорит

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

должны быть включены для dynamic loading но это ничего не говорит о C++ совместимость.
Кто-нибудь, кто знает, как решить эту проблему? Как я могу удалить эту ошибку, чтобы создать функции с использованием C ++ в PostgreSQL в среде Windows?

2

Решение

Вы собрали как C или как C++? Если вы использовали C++ вам нужно будет обернуть PG_MODULE_MAGIC в extern "C" блок, согласно написание расширений в C ++.

Если это вообще возможно, просто напишите ясно c и скомпилировать как простой cдержите C ++ вне изображения. Смешение кода C ++ в PostgreSQL является сложным и трудным делом, поэтому для новичка это нехорошо.

Если вам абсолютно необходимо использовать C ++, то самый разумный способ — написать код на C ++, extern "C" интерфейсы к нему, где объекты C ++ передаются и выходят как непрозрачные void указатели или указатели на пустые типы структур. Тогда используйте чистый c интерфейс, который вы выставили, чтобы написать свой модуль Pg. Есть такие инструменты, как SWIG это помогает создавать такие обертки, но обычно это не нужно для чего-то вроде модуля Pg.

Вы можете использовать C ++ непосредственно в модулях Pg с осторожностью, но Pg’s longjmp основанная обработка ошибок будут полностью испортите свой стек, если вы когда-нибудь позвоните Pg -> C++ -> Pg и получите ошибку. Серьезно, не делай этого. Держите ваш C ++ изолированным.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]