|
|
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
Работаю на FireBird (IB 6.0), написал библиотеку ib_FM.dll : Function Floor (Kol:Real):Integer;cdecl;export; begin Result:=Round(Int(Kol)); end; Function TrimChar(InString:PСhar):PChar;cdecl;export; begin Result:=PChar(Trim(AnsiString(InString))); end; exports Floor,TrimChar; Обьявил её в базе InterBase: DECLARE EXTERNAL FUNCTION FLOOR DOUBLE PRECISION RETURNS INTEGER BY VALUE ENTRY_POINT 'floor' MODULE_NAME 'ib_FM'; DECLARE EXTERNAL FUNCTION MYTRIM CSTRING(256) RETURNS CSTRING(256) ENTRY_POINT 'TrimChar' MODULE_NAME 'ib_FM'; Саму библиотеку поместил в каталог BIN InterBase но при попытке вставить функцию в процедуру машина матюкается на предмет того, что она не может найти эту самую функцию. При чем IBExpert енту функцию видит и вставляет по контексту, а при попытке сделать Commit получаю всё тот же мат. Размещение этой библиотеки в каталоге WINDIWS/SYSTEM к улучшению не привело. Обьясните дурню где я торможу !!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2002, 15:52 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
Мне кажется, что UDF надо располагать в "...\Firebird\UDF\" или настраивать переменую EXTERNAL_FUNCTION_DIRECTORY в файле ibconfig. Это всё описано в доке по интербэйсу с Борланда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2002, 21:01 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
Для maximF - если знаешь как, обьясни на пальцах, каким образом прописывать EXTERNAL_FUNCTION_DIRECTORY в файле ibconfig. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 10:03 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
Если хочешь прописать путь в конфигурационном файле IB, то это делается так EXTERNAL_FUNCTION_DIRECTORY "E:\WLDB" (в конце файла), но в твойм случае это не поможет. У меня таже самая проблема, и я ее пока не решил. Единственная разница, я пытаюсь подключить их UDF из IB_UDF.DLL (если хочешь, то можешь найти ее описание в документации: см. "Developer's guide.pdf", там есть список всех функций, описанных в этой 'dll'). (выдает ошибку:Invalid request BLR at offset 32 function SUBSTR is not defined module name or entrypoint could not be found...), хотя я все объявил и т.д.:((( Если сможешь разрешить свою проблему, то не мог бы мне сообщить как. (на всякий случай моя аська: 154966740) Буду очень благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2003, 19:00 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
discretus Попробуй положить библиотеку в папку UDF (впрочем она там и лежит и у меня без проблем подключается входящем в комплект поставки скриптом) Den Может я конечно что-то не понимаю, но я объявляю секцию export несколько иначе, ты тут не указываешь под каким имянем ее экспортить. Мне кажется нужно так exports Floor name 'Floor', TrimChar name 'TrimChar'; И в качестве послесовия, честно говоря не вижу зачем тебе эти функции... TrimChar есть в стандартной библиотеки, там правда она разбита на 2, а функция Floor вообще по мойму бессмысленна, подобная же операция выполняется при помощи cast(x as integer). Я бы скорее написал несколько иную функцию, которая не округляет , а отсекает дробную часть. Всего наилучшего, господа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2003, 06:28 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
StarWind: Все это я уже пробовал (и их скриптом и своим) - результат один - не работает. Может быть дело в том, что после выполнения скрипта метадата имеет несколько отличающийся вид: метадата: DECLARE EXTERNAL FUNCTION SUBSTR CSTRING(256) CHARACTER SET WIN1251, SMALLINT, SMALLINT RETURNS CSTRING(256) CHARACTER SET WIN1251 FREE_IT ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf'; а скрипт был: DECLARE EXTERNAL FUNCTION SUBSTR CSTRING(256), SMALLINT, SMALLINT RETURNS CSTRING(256) FREE_IT ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf'; Дело точно в этих параметрах, т.к. пробовал из той же стандартной библиотеки (ib_udf.dll) подключать функции, работающие с числами - все впорядке. А как дело доходит до символов......:((((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2003, 10:10 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
не знаю, поможет или нет, но у меня база создана с кодировкой Win1251 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2003, 10:25 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
У меня аналогично:((( Может дело и не в кодировке вовсе? А у тебя значит их библиотека работает? Не подскажешь как ты регистрировал UDFs. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 11:55 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
у меня все четко работает регистрировал при помощи штатного скрипта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 11:59 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
привет! В команде DECLARE EXTERNAL FUNCTION FLOOR регистр ENTRY_POINT имеет значение после изменения UDF необходимо переконектится к базе, только тогда изменения будут реально заметны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 12:14 |
|
||
|
Подключение библиотеки к базе InterBse
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, что влажу, но позвольте заметить о функции: Function Floor (Kol:Real):Integer;cdecl;export; begin Result:=Round(Int(Kol)); end; 1 - в качестве параметров передаются указатели, т.е. или с var, или с ^; 2 - зачем нужно export; ? - выкинь 3 - Result:=Round(Int(Kol)); - что такое Int? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 18:15 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32037363&tid=1580699]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 471ms |

| 0 / 0 |
