INTERBASE中的函数。(50分)

  • 主题发起人 主题发起人 maming
  • 开始时间 开始时间
M

maming

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位:
INTERBASE中要使用外部函数,要如何将自已编写好的DLL联入其中。
然后在INTERBASE中使用。如字符转换函数(INTTOSTR)等。INTERBASE
它自已有几个DLL,可是我没有办法使用其中的函数,请各位帮忙。
 
●InterBase 可以定义 User-defined functions (UDFs) 进行功能扩展
★语法:
DECLARE EXTERNAL FUNCTION name [ datatype | CSTRING ( int)
[, datatype | CSTRING ( int) …]]
RETURNS { datatype [BY VALUE] | CSTRING ( int)} [FREE_IT]
ENTRY_POINT ' entryname'
MODULE_NAME ' modulename';
★例子:
DECLARE EXTERNAL FUNCTION ABS /*函数名*/
DOUBLE PRECISION /*参数*/
RETURNSdo
UBLE BY VALUE /*返回值*/
ENTRY_POINT "fn_abs" /*动态连接库的输出函数名*/
MODULE_NAME "ib_udf";。/*动态连接库的名称*/
★调用的连接库和(Ib_util.dll)位置
<IB_INST_DIR>/BIN
<WIN_INST_DIR>/SYSTEM32
??不知Server For NT 为何要重新启动,或者是有User 连接到数据库而不起作用
▲<IB_INST_DIR>/Examples/api/Ib_udf.sql有常用函数的定义。
 
我是按你的方法做的,
但使用函数的时候总不成功,
你试成功了吗?
 
maming:
我已经通过,以前也遇到类似问题。
Dll是你自己写的还是Interbase的例子?
1。把连接库放在Windows/system32 不是Windows/system
2.重新启动Interbase服务器
3.如果不行,把错误信息发给我。
 
dll已放在Windows/system32 下;
是Interbase的ib_udf.dll;
我的步骤如下:
1、DECLARE EXTERNAL FUNCTION strlen
CSTRING(32767)
RETURNS INTEGER BY VALUE
ENTRY_POINT "IB_UDF_strlen" MODULE_NAME "ib_udf";
2、SHOW FUNCTION
STRLEN
3、重启INTERBASE
4、create procedure ss
returns(mm integer)
as
begin
mm=strlen('111112');
end
invalid request BLR at offset 30
-function STRLEN is not defined
-module name or entrypoint could not be found
 
定义时 MODULE_NAME "ib_udf" 改为 MODULE_NAME "ib_udf.dll"
看行不行
再不行的话,下面的也改:
ENTRY_POINT "IB_UDF_strlen" 改为 ENTRY_POINT "_IB_UDF_strlen" (多个下划线看看)
 
大小写无关(函数名除外)
Ib_util.dll也拷贝到System32下(Ib_UDF.dll用到了),如果不行,就是有问题。
Interbase文档写的是把.dll放在Path 可以搜索到的地方,但是我决的还是放系统路径比较好
 
INTERBASE的DLL已使用成功,谢谢几位。
自己编写的DLL却有点不行。
还是暂结束此问题吧!
 
结束了,不给分??
 
送上积分;结束问题。
 
后退
顶部