我做了一个UDFs为何不能用?请帮我看看错在哪里。谢谢!(100分)

  • 主题发起人 主题发起人 K
  • 开始时间 开始时间
K

K

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个UDFs为何不能用?请帮我看看错在哪里(我模彷例子可别笑我)。谢谢!
1、用Delphi制作dll,并编译。

library SdlDll;
uses
SysUtils;

{$R *.RES}

function IB_Sysdate:ShortString;stdcall;overload;
begin
Result:=FormatDateTime('yyyymm',date);
end;

exports
IB_Sysdate;
end.

2、将sdldll.dll文件考到:c:/Program Files/Interbase/UDF(不知这样做对不对)

3、运行InterBase6.01并进行定义

DECLARE EXTERNAL FUNCTION SYSDATE
CSTRING(80) CHARACTER SET NONE
RETURNS CSTRING(80) CHARACTER SET NONE FREE_IT
ENTRY_POINT 'IB_sysdate' MODULE_NAME 'sdldll.dll';

4、设定计数器(与相关的CREATE GENERATOR定义我己测试过没问题所以省略)
L_RECORDS表的NUMBERID字段类型varchar(20)

set term!!;
create TRIGGER SET_L_RECORDS for L_RECORDS
before insert as
begin
New.NUMBERID=sysdate||cast(gen_id(L_RECORDS_GEN,1) as varchar(10));
end!!
set term;!!

exit;
 
没人回答?
 
对于在DLL文件中使用STRING类型的单元,一定要把SHAREMEM包含在内,具体可看你的DLL
工程文件的最上面的注释部分,说的比较详细,因为STRING类型是自动分配内存的,而DLL
并不负责自动分配内存和回收,所以你应该用PCHAR代替使用STRING或在文件的USES列表中
的第一位将SHAREMEM包含进来,注意,一定要是第一个。
 
好的,我马上试试
 
谢谢only you:
还是不成,我用delphi程序测试没有问题,就是在Interbase中不认!
 是不是Interbase中我那没做对呀!

 library SdlDll;

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

uses
ShareMem,SysUtils;

{$R *.RES}

function IB_Sysdate:shortstring;stdcall;overload;
begin
Result:=FormatDateTime('yyyymm',date);
end;

exports
IB_Sysdate;
end.
 
呵呵,提前可以修改自己的贴子(提问的ID)
懂Interbase的高手似乎不多,求人不如求己哦,搞个最简单的试试通不通阿 :)
 
sportsman:
我做的这个己经是最简单的了,可怎么也不成,叹!总不能老用别人的UDF吧!
 
附加功能不未完成,太麻烦了!
 
我的问题自己解决了,但还是谢谢各位
 
后退
顶部