JLIST wrote: >>> I'm using the Skyp4COM object in a delphi app. Sometimes the >>> application (not the COM object itself) shows error message dialog >>> boxes from the COM object. There is an error event from the COM >>> object and I'm catching that, but this doesn't help. > >> Are you sure you're catching the right exception type? > > As a matter of fact, I'm not catching any exceptions. I'm only > handling the error event.
OK, time to be more precise. When you say you're handling an event, that suggests you have a component on your form and you've assign an event-handler method to an event property in the Object Inspector. When you say you're catching something, that means there's an exception. Are you catching an exception, handling an event, or checking the return value of a function? > When the exceptions happen, the error > events are also fired but handling them doesn't prevent the error > messages. What causes the events to fire? That is, where in the code does an exception get make an event handler get called? > I think it's a good idea to put some try-catch blocks > around calls to the COM object. Not unless you actually know what kind of exception you plan on catching, and you know what you're going to do with it once you catch it. Otherwise, you're only hurting things. > However, I suppose this does not > help if the COM object is doing something in its own threads and > an exception happens in those threads? Is there a good way to > catch those exceptions? Not really. An unhandled exception causes the thread to die. MadExcept can catch the exception and tell you about it, but the thread still has to die because there's not really anything anyone can do about it at that point. >> While the message box is showing, press the "pause" button in the IDE. >> Then bring up the call stack, and you'll see exactly who's displaying >> the >> dialog box. > > The thing is, during debugging, the error is difficult to reproduce. > It only happens when traffic is high, with many concurrent users. Is it always the same kind of error? What error is it? Are you sure you have the threading model right for your COM objects? (Apartment, free, etc.) >> A likely candidate is Delphi's built-in exception handler. It gets >> invoked >> whenever an exception goes unhandled while a control's event handler is >> active. > > Is there a generic way to replace the exception handler and catch > those uncaught exceptions? I suppose there must be, because that's > how tools like madExcept work? An easy way is to handle the application's OnException event. A better way is to buy MadExcept and use it. > I'll start with putting in some try catch blocks first. Thanks! Don't catch exceptions unless you know what you're going to do with them. Logging them is not the same as handling them. Handling an exception means you've done something to mitigate the problem that caused the exception in the first place. -- Rob _______________________________________________ Delphi mailing list -> [email protected] http://lists.elists.org/cgi-bin/mailman/listinfo/delphi

