powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Использование С в ХП
13 сообщений из 13, страница 1 из 1
Использование С в ХП
    #33210485
Patriot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего вопрос уже не раз обсуждался поэтому прошу прощения заранее но в виду неработоспособности сайта вплане поиска , всетаки решаюсь его задать.
Проблема в общем-то в следующем:
Имеется dll ф-я откомпилированная на CBuilder 6 со следующем исходным кодом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#include <windows.h>
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return  1 ;
}
//---------------------------------------------------------------------------
__declspec(dllexport) int add_one(int arg)
{
    return ++arg;
}

Пытаюсь обьявить ф-ю в Постгрессе:
Код: plaintext
1.
2.
3.
CREATE FUNCTION add_one(integer) RETURNS integer
     AS '$libdir/1', 'add_one'   language 'C'
        with (isstrict);

Выходит ошибка: Errore could not load library C:/Program Files/PostgreSQL/8.0/lib/1.dll
Хотя естественно именно там она и лежит.

Заранее благодарен за любой ответ !
...
Рейтинг: 0 / 0
Использование С в ХП
    #33211063
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Patriot...Имеется dll ф-я откомпилированная на CBuilder 6 со следующем исходным кодом.......


Не знаю чем смогу помочь...но то, что знаю...
1) необходимо проверить ссылки получаемой дэлеле на другие модули. По первости желательно всё перенести прям в подкоталог откель грузиться экзэшник (путь по умолчанию). путь по которому делаеться загрузка вашей дэлеле, по нему (лично мне) не удалось заставить подгружать другие модули.
2) экспортируемое имя... проверить без подчёркивания ли оно обьявляеться... Либо подправить деклорацию, либо по старинке - создать дэф файл и т.д...
3) не знаю насколько помогу, но обьявляю в сишниках таким макаром...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include "stdafx.h"
#include "postgres.h"
#include "fmgr.h"
#include "executor/spi.h"
#include "Loader.h"

PG_FUNCTION_INFO_V1(wait);

Datum wait(void)
{
  Sleep( 3000 );
  PG_RETURN_VOID();
} 

4) можно добавить, что явно указываю путь загрузки - но то не обязаловка, как я понимаю (если модуль в стандартных либах постгресса)...


удачи Вам
(круглый)
...
Рейтинг: 0 / 0
Использование С в ХП
    #33211078
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ышо....
типы передаваемых/возвращаемых значений на данной фазе побоку...постгресс именно не находит связки "имя файла-имя функции" либо то, что "не пускает" - ссылки на другие библиотеки.

(круглый)
...
Рейтинг: 0 / 0
Использование С в ХП
    #33211960
Patriot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0

По первости желательно всё перенести прям в подкоталог откель грузиться экзэшник (путь по умолчанию). путь по которому делаеться загрузка вашей дэлеле, по нему (лично мне) не удалось заставить подгружать другие модули.



Экзэшника то как такогового нет ... подключаю также доп.модули например tsearch2 похоже тут дело в длл-ке ... Не пойму вот только что ...
Интересно как вообще в винде кто их компилит ?
...
Рейтинг: 0 / 0
Использование С в ХП
    #33212636
Фотография mef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
могу ошибаться, но dll - ки нужно компилировать с правильными ключами.

http://www.postgresql.org/docs/8.0/interactive/xfunc-c.html
31.9.6. Compiling and Linking Dynamically-Loaded Functions

или Вы так и делали?
...
Рейтинг: 0 / 0
Использование С в ХП
    #33213712
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PatriotЭкзэшника то как такогового нет ...

имелось ввиду экзешник самого постгресса.
он подымаеться на каждый коннект отдельно. Вот в его адрессное пространство и грузиться весь Ваш (наш - не важно) хлам под названием дэлеле...

удачи Вам
(круглый)
...
Рейтинг: 0 / 0
Использование С в ХП
    #33214871
Patriot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mefмогу ошибаться, но dll - ки нужно компилировать с правильными ключами.

http://www.postgresql.org/docs/8.0/interactive/xfunc-c.html
31.9.6. Compiling and Linking Dynamically-Loaded Functions

или Вы так и делали?

Да так и делал ... Наверное не так много программистов работает с постгрессом под виндой :(
...
Рейтинг: 0 / 0
Использование С в ХП
    #33215609
Фотография mef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а слэш в другую сторону ставить не пробовали, и путь абсолютный указать попроще C:\1\
...
Рейтинг: 0 / 0
Использование С в ХП
    #33215696
Patriot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все попробовал ... тут все-таки дело в самой длл-ке ...
...
Рейтинг: 0 / 0
Использование С в ХП
    #33216244
Фотография mef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, чудес не бывает :)) вот в офиц. руководстве доброжелатель коммент оставил, может поможет
....
5) Write the CREATE FUNCTION with double backslashes (\)for the dir separators. Postgres needs them escaped.

CREATE OR REPLACE FUNCTION add_one(INTEGER)
RETURNS INTEGER
LANGUAGE C
STABLE
RETURNS NULL ON NULL INPUT
AS 'C:\PGSQL\PGEXTEND\ADDONE.dll', 'add_one';

NOTES: These are pitfalls.
1) Make sure Visual C++ made the DllMain() function for you.
2) Make sure every exported SQL function in in a C-linkage block:
extern "C" { ... };
3) CREATE FUNCTION does not allow spaces in the DLLs path. Consider adding a special path to store postgres DLLs, with all uppercase and no whitespace.
...

сам я под линуксам писал/подключал - вроде не было проблем.
Удачи.
...
Рейтинг: 0 / 0
Использование С в ХП
    #33216462
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PatriotВсе попробовал ... тут все-таки дело в самой длл-ке ...

имя дэлеле полное ?
1.dll

1) попробуйте натравить на неё
Depends
Прям в подкоталоге либов... Она Вам все зависимые покажет и расскажет, могёт ли загрузить али нет.
2) Возможно сделать так... взять компильнуть экзе проэкт (который ссылаеться на Вашу дэлеле). подложить в подкоталог либ...позвать... посмотреть встаёт либо нет...

да и ещё...
есть соображение, что дополнительные дэлеле (если есть неявная загрузка - см. ключи компиляции на предмет юзанья библиотек) НЕ будут грузиться из подкоталога либ... Как проверка - перенеси их в подкоталог, где находиться сам экзешник постгресса. бин, если по умолчанию...

загрузка всех дэлеле на которые есть неявные ссылки, производиться при регистрации экстендед функции.


с уважением
(круглый)
...
Рейтинг: 0 / 0
Использование С в ХП
    #33217282
Patriot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обязательно попробую вышеизложенное ... спасибо !
...
Рейтинг: 0 / 0
Использование С в ХП
    #33218081
Patriot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была неправильно написана dll-ка ... вот ведь парадокс ... скомпилировл туже либу под дельфой ... естественно переписав на Паскаль и все заработало ...
Всем спасибо вопрос снимается ...
Надо компилить dll написанные на С на Visual C++.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Использование С в ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]