COM+组件的调试 (100分)

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

kehua

Unregistered / Unconfirmed
GUEST, unregistred user!
按照李维《DELPHI5.X ADO/MTS/COM+ 高级程序设计篇》机械工业出版社P428的调试步骤调
试COM+组件不成功,有成功调试COM+组件的吗?
1.在调试器中启动前面打勾。
选择调试器路径为C:/Program Files/Borland/Delphi6/Bin/bordbg60.exe "dllhost.exe /ProcessID:{CBD3C605-C864-4CE8-B6E8-9E33FE32ACCD}
2。Delphi打开你的组件程序,在Run菜单的Parameters中设置
Host Application:c:/WINNT/system32/dllhost.exe
Parameters:/ProcessID:{CBD3C605-C864-4CE8-B6E8-9E33FE32ACCD}
3。很关键的一点:组件程序:project|option|linker|Include TD32 debug info 和Include remote debug symbols打勾
4。在组件程序中设置断点,点击Run执行你的组件程序。
5。执行你的调用的应用程序,会停在组件程序的断点上。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1000842
 
李维书上调试例子(delphi6+windows 2000pro)
procedure TForm1.btnLoginClick(Sender: TObject);
var
// LoginObj : ImtsSecurityObj;
vCookie : OleVariant;
begin
if not assigned(LoginObj) then
LoginObj := ComtsSecurityObj.Create;
//此处设置断点
// LoginObj := CreateComObject(CLASS_mtsSecurityObj) as ImtsSecurityObj;
LoginObj.Login(edtName.Text, edtPassword.Text, vCookie);
if (vCookie <> '') then
begin
edtCookie.Text := vCookie;
// edtCookie.Visible := True;
end
else
ShowMessage('無效的登錄');
end;
在com+组件设置的调试那不要打钩
选PDemoProfileObject.dll,Run|Parameters
Host Application:C:/Program Files/MD53Demos/Ch06/DemoMTSObject/PClientDemo1.exe
Parameters:/ProcessID:{8DBEDFF5-7BC0-4BBC-8156-3212169EEF70}
按F9,输入姓名、密码,按登录按钮,可以trace into 到
class function ComtsSecurityObj.Create: ImtsSecurityObj;
begin
Result := CreateComObject(CLASS_mtsSecurityObj) as ImtsSecurityObj;
end;
但是,不能trace into 到
procedure TmtsSecurityObj.Login(const sName, sPassword: WideString;
var vCookie: OleVariant);
var
iCount : Integer;
aPerson : TSimpleProfile;
begin
vCookie := '';
for iCount := 0 to aProfile.Count - 1do
// Iterate
begin
aPerson := TSimpleProfile(aProfile.Items[iCount]);
if ( (aPerson.Name = sName) and (aPerson.Password = sPassword) ) then
vCookie := aPerson.Cookie;
end;
// for
end;

class function ComtsSecurityObj.Create 在组件PDemoProfileObject.dll内的
PDemoProfileObject—TLB.pas里,可以跟踪。
procedure TmtsSecurityObj.Login(const sName, sPassword: WideString;
var vCookie: OleVariant);在组件PDemoProfileObject.dll内的uDemomtsProfile.pas
里,不能跟踪。
我也不知道为什么?
在procedure TmtsSecurityObj.Login内设置断点会打叉。
 
我也碰到过这种情况,照书上的方法设置之后,我设置的断点根本就没有用
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1146732
 
七搞八搞,终于可以trace into 到procedure TmtsSecurityObj.Login乐。
李维书上例子调试成功了,可以trace into 到procedure TmtsSecurityObj.Login。
注意两点,1.重建所有工程文件,2.COM+组件先启动,后打勾。
在Delphi IDE里先Run组件,后Run客户端应用程序。不必开启2个delphi!
不过有时不打勾也行。
 
多人接受答案了。
 
后退
顶部