udf问题,请各位大虾指点,在线等

czjearth 2004-09-28 04:58:52

{
这是用Delphi写的udf, 功能:返回传入目录下的所有文件名列表
(Dll在Delphi环境下测试正常.)
path: 传入目录。
FilterExt: 用来过滤的扩展名
返回:返回的文件名字符串,以'|'做分隔
}
function GetFileName(Path: String; FilterExt:String): String;
var
sr: TSearchRec;
ri: integer;
FileName, FileExt, s: String;
begin
s:= '';
if RightStr(Path, 1) <> '\' then
Path:= Path + '\';
if not DirectoryExists(Path) then Exit;

Path:= Path + '*.*';
ri:= FindFirst(Path, faArchive, Sr);
while (ri = 0) do
begin
//取文件名和文件扩展名
FileName:= ExtractFileName(Sr.Name);
FileExt:= ExtractFileExt(FileName);
if (FilterExt <> '') then
begin
if LeftStr(FilterExt,1) <> '.' then
FilterExt:= '.' + FilterExt;
if FilterExt = FileExt then
s:= s + FileName + '|';
end
else
s:= s + FileName + '|';

ri:= FindNext(Sr);
end;
Result:= s;
end;

exports
GetFileName;

//这是注册udf的语句:
DECLARE EXTERNAL FUNCTION GETFILENAMES
VARCHAR(255) CHARACTER SET NONE, VARCHAR(8) CHARACTER SET NONE
RETURNS VARCHAR(1200) CHARACTER SET NONE FREE_IT
ENTRY_POINT 'GetFileName' MODULE_NAME 'GetFNs.dll';

注册成功后,测试:
select GETFILENAMES('D:\',') from rdb$database
出错:
connection lost to databse
然后将interbase数据库服务停掉, 需要重启服务.
...全文
160 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
YuyuanJian 2005-02-22
  • 打赏
  • 举报
回复
坚持学习!
wangshengyun 2005-02-20
  • 打赏
  • 举报
回复
你这样试一下.
function GetFileName(Path: pchar; FilterExt:pchar): pchar;cdcel;export;
var
sr: TSearchRec;
ri: integer;
FileName, FileExt, s: String;
tmpPath:string;
begin
s:= '';
result:=pchar(s);
tmpPath:=string(path);
if RightStr(string(tmpPath), 1) <> '\' then
tmpPath:= tmpPath+ '\';
if not DirectoryExists(string(tmpPath)) then Exit;

tmpPath:= tmpPath+ '*.*';
ri:= FindFirst(tmpPath, faArchive, Sr);
while (ri = 0) do
begin
//取文件名和文件扩展名
FileName:= ExtractFileName(Sr.Name);
FileExt:= ExtractFileExt(FileName);
if (FilterExt <> '') then
begin
if LeftStr(FilterExt,1) <> '.' then
FilterExt:= '.' + FilterExt;
if FilterExt = FileExt then
s:= s + FileName + '|';
end
else
s:= s + FileName + '|';

ri:= FindNext(Sr);
end;
Result:=MakeResultString(pchar(s),nil,0);
end;

//MakeResultString函数你可找相关的资料
YuyuanJian 2005-02-17
  • 打赏
  • 举报
回复
学习
SeekMyself 2005-01-01
  • 打赏
  • 举报
回复
留意一下
耙子 2004-11-28
  • 打赏
  • 举报
回复
有什么问题?
czjearth 2004-11-28
  • 打赏
  • 举报
回复
谢谢pazee(耙子),但Delphi上说,引入ShareMem单元就可以。
不过我还是按你的方法试了一下,好像还有问题,
耙子 2004-10-03
  • 打赏
  • 举报
回复
function GetFileName(Path: String; FilterExt:String): String;
~~~~~~~~~
function GetFileName(Path: String; FilterExt:String): pchar;
var
sr: TSearchRec;
ri: integer;
FileName, FileExt, s: String;
szRet: array [1..256] of char;
begin

....

strcopy(szRet, pchar(s));
result:= szRet;
耙子 2004-10-03
  • 打赏
  • 举报
回复
udf 不能用 Delphi的string类型做返回值

他的约定是 以Null结尾的字符串,就是C的字符串类型。
所以用delphi写,你要用pchar,而且要自己申请空间。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧