用Delphi5编写了一个基于OLE自动化的DLL。在里面有
1、从注册表取参数
2、从ini文件取参数
3、用TFileStream对象建立文件流存取局域网上其他机器的lib二进制文件。
当用Delphi写的客户端用IDispatch接口调用时工作正常,但在SQL Server2000的Trigger中,用sp_OACreate和sp_OAMethod调用时,前两个过程都返回空值,第三个过程则不能建立文件流。代码如下,请高手指点:function TPmsNetFile.GetInIPath: String;
var Reg:TRegistry;
begin
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_CURRENT_USER;
if (Reg.OpenKey('\Software\Hisino\Info',False))=True then
begin
Result:=Reg.ReadString('Path'); //get the path
end;
finally
Reg.CloseKey;
Reg.Free;
end;
end;constructor TPmsNetFile.Create;
var BillName:String;
Hisinoinifile:TInifile;
begin
BillName:=ExtractFilePath(paramstr(0))+IniFileName;
ID:=BillName;
try
Hisinoinifile:=TInifile.Create(BillName);
NFDir:=Hisinoinifile.readString('PmsInfo','NFDir','');
finally
Hisinoinifile.Destroy;
end;
end;function TPmsNetFile.setCheckInOut(dn: Integer; Check: Byte;
Guest:String): Boolean;
var fstream:TFilestream;
AllFileName:String;
begin
AllFileName:=NFDir+CheckInOutFileName;
if SeekBillFile(AllFileName,NFDir) then
begin
Try
fstream:=Tfilestream.create(AllFileName,fmOpenReadWrite);
//do something
Finally
fstream.Free;
end;
end
else result:=False;
end;
1、从注册表取参数
2、从ini文件取参数
3、用TFileStream对象建立文件流存取局域网上其他机器的lib二进制文件。
当用Delphi写的客户端用IDispatch接口调用时工作正常,但在SQL Server2000的Trigger中,用sp_OACreate和sp_OAMethod调用时,前两个过程都返回空值,第三个过程则不能建立文件流。代码如下,请高手指点:function TPmsNetFile.GetInIPath: String;
var Reg:TRegistry;
begin
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_CURRENT_USER;
if (Reg.OpenKey('\Software\Hisino\Info',False))=True then
begin
Result:=Reg.ReadString('Path'); //get the path
end;
finally
Reg.CloseKey;
Reg.Free;
end;
end;constructor TPmsNetFile.Create;
var BillName:String;
Hisinoinifile:TInifile;
begin
BillName:=ExtractFilePath(paramstr(0))+IniFileName;
ID:=BillName;
try
Hisinoinifile:=TInifile.Create(BillName);
NFDir:=Hisinoinifile.readString('PmsInfo','NFDir','');
finally
Hisinoinifile.Destroy;
end;
end;function TPmsNetFile.setCheckInOut(dn: Integer; Check: Byte;
Guest:String): Boolean;
var fstream:TFilestream;
AllFileName:String;
begin
AllFileName:=NFDir+CheckInOutFileName;
if SeekBillFile(AllFileName,NFDir) then
begin
Try
fstream:=Tfilestream.create(AllFileName,fmOpenReadWrite);
//do something
Finally
fstream.Free;
end;
end
else result:=False;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货