delphi中使用包技术,不能调试包文件?(200分)

  • 主题发起人 真.浪人西林
  • 开始时间

真.浪人西林

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi中使用包技术,不能调试包文件?请教各位高手
我打开包文件,指定包中的单元模块,设好断点,在主菜单中Run》parameter中指定
host application:为我的包的主程序执行文件;但调试时,断点失效,请教》》》
 
先看看这一段代码:

procedure THR_mainform.modclick(sender:Tobject); //模块事件加载过程
var
labname: string;
iCounter:Integer;
Oxmarq:ToxMarquee;
SQLString:String; //QUERYPRO参数值
Tagkey:string;
begin
if sender is ToxGraphicButton then
begin
labname:=(sender as ToxGraphicButton).Name ;
Querypro.Connection :=form_login.ado;
Querypro.Parameters.ParamValues['labelname']:=labname;
querypro.Active :=true;
with querypro do
begin
if fieldbyname('程序类型').AsString ='.exe' then //==============如果调用的是.exe时
begin
if ShellExecute(handle,'open',pchar(fieldbyname('程序名称').AsString+'.exe'),pchar(fieldbyname('Parameter').AsString),nil,SW_SHOWMAXIMIZED)<32 then
begin
ShowMessage(SysErrorMessage(GetLastError));
labname:='';
querypro.Active :=false;
end;
end
else// =================================================如果调用的是bpl时
if fieldbyname('程序类型').AsString ='.bpl' then
begin
AQ_selectsql.Connection :=form_login.ado ;
showmessage(fieldbyname('tag').AsString) ;
tagkey:= trim(fieldbyname('tag').AsString);
AQ_selectsql.Parameters.ParamValues['tagkey']:=tagkey ;
AQ_selectsql.Active :=true;
with AQ_selectsql do
begin
SQLString:='select * from' +' '+fieldbyname('v_table').AsString+' '+'where'+' '+fieldbyname('wherekey').AsString +' '+'order by'+' '+fieldbyname('orderby').AsString ;
Showmessage(SQLString) ;
end;
AQ_selectsql.Close ;
try
Loadbpl := LoadPackage(fieldbyname('程序名称').AsString+'.bpl');
Formbpl := TCustomForm(TComponentClass(FindClass(fieldbyname('包类').AsString)).Create(Application));
for iCounter := 0 to Formbpl.ComponentCount - 1 do
begin
if UpperCase(Formbpl.Components[iCounter].ClassName) ='TADOQUERY' then
begin
AQ_CONN:=TADOQUERY(Formbpl.Components[iCounter]);
AQ_CONN.Connection :=Form_login.ado;
AQ_CONN.SQL.Add(sqlString);
break;
end;
end;
for iCounter := 0 to Formbpl.ComponentCount - 1 do
begin
if UpperCase(Formbpl.Components[iCounter].ClassName) ='TOXMARQUEE' then
begin
Oxmarq:=TOXMARQUEE(Formbpl.Components[iCounter]);
Oxmarq.Caption:=tagkey;
break;
end;
end;
//Formbpl.show;
Formbpl.showmodal;
mustfreebpl:=true;
finally
labname:=''; //清除变量
querypro.Active :=false; //断开链接
end;
end
else//=====================================================如果调用的是dll时
if fieldbyname('程序类型').Asstring ='.dll' then
begin
showmessage('不能打开这种类型的程序') ; //需修改
labname:='';
querypro.Active :=false;
end
else
showmessage('没有这种454类型的程序');
labname:='';
querypro.Active :=false;
end;
end;
end;
 
Sorry,我的本意是说在Delphi的IDE环境下调试包时无法单步跟踪,就这么简单。
请问这是什么情况?
 
你的host application要选上Build with RunTime Packages,在里面要加上你要调试的包,
并且要确定能执行到你要调试的这段程序
 
to 真.浪人西林
你试试其他工程能调试?
可能你的Delphi出问题了
 
我在程序里是通过一个包来调用另一个包,在host application中已经包含了第一个包,
可以跟踪到,第二个包运行起来没有问题,但仅仅因为它本身是被调用的就无法跟踪吗?
 
别的工程调试没有问题。
 
这个我没试过,不知道
 
订试包,我也试不出来,不知道怎么调
 
新建立一个项目,然后将你的包工程加入进去,另外再加入宿主程序,在主菜单中Run》parameter中指定
host application为"C:/Program Files/Borland/Delphi5/Bin/delphi32.exe",这样就可以调试了!
 
顶部