Эй, ТАК!Я публикую свою проблему переполнения стека на StackOverflow.com.Ирония в лучшем виде!
В любом случае.Я вызываю эту процедуру в моем обработчике событий 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 это не имеет значения, так как мой SO был отслежен, чтобы появиться здесь
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;и Single Step thru, эти две строки выполняются снова и снова, сразу после друг друга!
И когда я закомментирую sCtgName := GetCategoryByID(CategoryID).DisplayName;
в первом фрагменте кода, переполнения нет, появляется сообщение, что один раз это должно быть.Тем не менее, GetCategoryByID
- это функция, которую я написал, и я тоже написал одну аналогичную, которая прекрасно работает (GetCategoryByName), поэтому я не понимаю, почему она решила повторить
// Return the Category as Result (IGroup)
Result := Category;
// Exit the function.
Exit;
и снова.
Если вам нужна дополнительная информация, не стесняйтесь спрашивать!
РЕДАКТИРОВАТЬ: Вот как вы можете воспроизвести это: https://gist.github.com/813389
РЕДАКТИРОВАТЬ:Вот мой CallStack, согласно запросу: ![CallStack](https://i.stack.imgur.com/OWwDO.png)
Edit2: Больше информации: ![More Info](https://i.stack.imgur.com/8Rn5c.png)
Спасибо за ваше время!- Джефф