我现在用delphi写了一个dll,不传递参数都正常,现在在调试带参数的dll时遇到了问题。
谁帮忙解答一下
var
ls_ret,ls1,ls2,ls3:string;
bType: Byte;
fNull: Bool;
cbMaxLen, cbActualLen: ULONG;
.....
if srv_rpcparams(pSrvProc) = 3 then
begin
srv_paraminfo(pSrvProc, 1, @bType,@cbMaxLen, @cbActualLen,@ls1, @fNull);
srv_paraminfo(pSrvProc, 2, @bType,@cbMaxLen, @cbActualLen,@ls2, @fNull);
srv_paraminfo(pSrvProc, 3, @bType,@cbMaxLen, @cbActualLen,@ls3, @fNull);
end;
srv_describe(pSrvProc, 1, '参数', SRV_NULLTERM,
SRVCHAR, 255,
SRVCHAR, 0, nil);
srv_setcoldata(pSrvProc, 1, @ls1);
srv_sendrow(pSrvProc);
srv_setcoldata(pSrvProc, 1, @ls2);
srv_sendrow(pSrvProc);
srv_setcoldata(pSrvProc, 1, @ls3);
srv_sendrow(pSrvProc);
...
srv_senddone(pSrvProc,(SRV_DONE_COUNT or SRV_DONE_MORE), 0, 3);执行后报如下错
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionCheckForData (CheckforData()).
Server: Msg 11, Level 16, State 1, Line 0
General network error. Check your network documentation.Connection Broken
我的目的是想看到3个参数值,以下是调用过程
declare @1 varchar(100),
@2 varchar(100),
@3 varchar(100),
@4 varchar(100)
set @1='B'
set @2='C'
set @3='D'
exec @4=xp_EpPackFile @1,@2,@3
谁帮忙解答一下
var
ls_ret,ls1,ls2,ls3:string;
bType: Byte;
fNull: Bool;
cbMaxLen, cbActualLen: ULONG;
.....
if srv_rpcparams(pSrvProc) = 3 then
begin
srv_paraminfo(pSrvProc, 1, @bType,@cbMaxLen, @cbActualLen,@ls1, @fNull);
srv_paraminfo(pSrvProc, 2, @bType,@cbMaxLen, @cbActualLen,@ls2, @fNull);
srv_paraminfo(pSrvProc, 3, @bType,@cbMaxLen, @cbActualLen,@ls3, @fNull);
end;
srv_describe(pSrvProc, 1, '参数', SRV_NULLTERM,
SRVCHAR, 255,
SRVCHAR, 0, nil);
srv_setcoldata(pSrvProc, 1, @ls1);
srv_sendrow(pSrvProc);
srv_setcoldata(pSrvProc, 1, @ls2);
srv_sendrow(pSrvProc);
srv_setcoldata(pSrvProc, 1, @ls3);
srv_sendrow(pSrvProc);
...
srv_senddone(pSrvProc,(SRV_DONE_COUNT or SRV_DONE_MORE), 0, 3);执行后报如下错
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionCheckForData (CheckforData()).
Server: Msg 11, Level 16, State 1, Line 0
General network error. Check your network documentation.Connection Broken
我的目的是想看到3个参数值,以下是调用过程
declare @1 varchar(100),
@2 varchar(100),
@3 varchar(100),
@4 varchar(100)
set @1='B'
set @2='C'
set @3='D'
exec @4=xp_EpPackFile @1,@2,@3
如果是自动获取参数的?看看ADOConnection控件ConnectionString的参数是否为空?
不为空,那就清空ConnectionString的参数(有时ADOConnection控件无意中会指定好连接参数了).
也要注意一下变量的参数类型匹配?
Windows,
SysUtils,
MSODSApi;{$R *.res}
Function GetParamStr(pSrvProc: SRV_PROC; Index : integer; Var Param : String ) : integer;
var
PType : Byte;
cbMaxLen , ParaLen : DWORD;
IsNULL : BOOL;
begin
Result := NO_ERROR;
srv_paraminfo(pSrvProc, index, @PType, @cbMaxLen, @ParaLen, NIL, @IsNULL); if PType in [SRVTEXT,SRVVARCHAR,SRVCHAR,SRVNTEXT,
SRVBIGVARCHAR,SRVBIGCHAR,SRVNVARCHAR,SRVNCHAR] then
begin
Param := '';
if ParaLen>0 then begin
SetLength(Param , ParaLen);
srv_paraminfo(pSrvProc, index, @PType, @cbMaxLen, @ParaLen, @Param[1], @IsNULL);
end;
end
else begin
Result := -1;
end;
end;
Function EpPackFile(pSrvProc: SRV_PROC) : integer;cdecl;
var
ls1,ls2,ls3 : String;
n : integer;
begin Result := 1;
n := srv_rpcparams(pSrvProc);
if n <> 3 then begin
// 不是3个参数
end;
if (GetParamStr(pSrvProc,1,ls1)<>NO_ERROR) then begin
// 不是字符串
end;
if (GetParamStr(pSrvProc,2,ls2)<>NO_ERROR) then begin
// 不是字符串
end;
if (GetParamStr(pSrvProc,3,ls3)<>NO_ERROR) then begin
// 不是字符串
end;
n := Length(ls1);
srv_describe(pSrvProc, 1 , '参数', SRV_NULLTERM, SRVBIGVARCHAR,
n, SRVBIGVARCHAR, n, NIL);
srv_setcoldata(pSrvProc, 1 , @ls1[1]);
srv_sendrow(pSrvProc);
srv_setcoldata(pSrvProc, 1 , @ls2[1]);
srv_sendrow(pSrvProc);
srv_setcoldata(pSrvProc, 1 , @ls3[1]);
srv_sendrow(pSrvProc);
srv_senddone(pSrvProc, (SRV_DONE_COUNT or SRV_DONE_MORE), 0, 1);
end;
exports
EpPackFile Name 'xp_EpPackFile';
begin
end.
IF object_id('xp_EpPackFile') IS NOT NULL EXEC sp_dropextendedproc 'xp_EpPackFile';
EXEC sp_addextendedproc 'xp_EpPackFile', 'project1.dll';
EXEC master..xp_EpPackFile 'aa','bb','cc';
EXEC sp_dropextendedproc 'xp_EpPackFile';
DBCC SPEncrypt(FREE);
请大家关注一下:http://topic.csdn.net/u/20071203/11/9b544dc9-efeb-4df6-b728-b1e775cb72b7.html
我用fastReport控件封装成DLL做为web调用的打印公共接口,但在WEB调用时偶尔会出现存储空间不足,程序跟踪又捕捉不到,不知道大家有类似的问题吗,请提供些思路。