Mega Code Archive

 
Categories / Delphi / Activex OLE
 

Delphi 6 - imported automation events bug

Why don't any of the events in my imported ActiveX control work? Answer: Sad but true. Delphi 6's type library importer is badly broken with regards to the event sinks. What's happening is that in InvokeEvent mehod that determines where to send the events by DispID each event handler called has its parameters reversed. So for example in Delphi 5 where it's correct the imported event looks like this; if Assigned(FOnRecognition) then FOnRecognition(Self, Params[0] {Integer}, Params[1] {OleVariant}, Params[2] {SpeechRecognitionType}, Params[3] {const ISpeechRecoResult}); //while in Delphi 6 it looks like this; if Assigned(FOnRecognition) then FOnRecognition(Self, Params[3] {const ISpeechRecoResult}, Params[2] {SpeechRecognitionType}, Params[1] {OleVariant}, Params[0] {Integer}); which just will not do. The solution is to either fix them all by hand use an import created by Delphi 5 use official Borland pach for Delphi 6