delphi – Stack Overflow
嘿S.O!我在StackOverflow.com上发布了Stack Overflow问题.讽刺最好!
无论如何.我在我的SkypeReply事件处理程序上调用此过程,该事件被解雇了很多: Procedure OnCategoryRename; Var CategoryID : Integer; sCtgName : String; Begin if (AnsiContainsStr(pCommand.Reply,'GROUP')) and (AnsiContainsStr(pCommand.Reply,'DISPLAYNAME')) then begin sCtgName := pCommand.Reply; Delete(sCtgName,1,Pos('GROUP',sCtgName)+5); CategoryID := StrToInt(Trim(LeftStr(sCtgName,Pos(' ',sCtgName)))); sCtgName := GetCategoryByID(CategoryID).DisplayName; // Removing THIS line does not produce a Stack Overflow! ShowMessage(sCtgName); end; 这样做的想法是通过我的Skype群组列表循环,以查看已重命名的群组. AFAIK并不重要,因为我的S.O被追溯到这里出现 Function GetCategoryByID(ID : Integer):IGroup; Var I : Integer; Category : IGroup; Begin // Make the default result nil Result := nil; // Loop thru the CUSTOM CATEGORIES of the ONLY SKYPE CONTROL used in this project // (which 100% positive IS attached ;) ) for I := 1 to frmMain.Skype.CustomGroups.Count do Begin // The Category Variable Category := frmMain.Skype.CustomGroups.Item[I]; // If the current category ID returned by the loop matches the passed ID if Category.Id = ID then begin // Return the Category as Result (IGroup) Result := Category; // Exit the function. Exit; end; End; End; 当我在Result:= Category设置断点时;和单步,这两行一遍又一遍地执行! 当我注释掉sCtgName:= GetCategoryByID(CategoryID).DisplayName;在第一个代码片段中,没有溢出,消息显示一次它应该.但是,GetCategoryByID是我写的一个函数,我写了一个类似的函数,它工作得很好(GetCategoryByName),所以我不明白为什么它决定重复 // Return the Category as Result (IGroup) Result := Category; // Exit the function. Exit; 一遍又一遍地. 如果您需要更多信息,请不要犹豫! 编辑:以下是如何重现它:https://gist.github.com/813389 编辑:这是我的CallStack,按要求: Edit2:更多信息: 谢谢你的时间! 解决方法
您的问题中没有显示的内容:
你在这里发布的“OnCategoryRename”函数是一个从“TForm.Skype1Reply”回调调用的子函数. 要看到这一点,我必须点击你的github链接 – 但我认为这是你问题的重点. 我猜 : >您的“GetCategoryById”函数实际上发送一个查询,触发“Skype1Reply”. 我认为快速而肮脏的解决办法是改变 sCtgName := GetCategoryByID(CategoryID).DisplayName; // Removing THIS line does not produce a Stack Overflow! 同 sCtgName := //find another way to get the new name,which you can probably get from your ICommand object pCommand.Reply.ReadDataFromReplyAndGetNewDisplayName; 将来,我建议您发布此类问题的完整代码示例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |