Author: Alec Bergamini
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;
1 if Assigned(FOnRecognition) then2 FOnRecognition(Self, Params[0] {Integer}, Params[1] {OleVariant}, Params[2]
3 {SpeechRecognitionType}, Params[3] {const ISpeechRecoResult});
4 5 //while in Delphi 6 it looks like this; 6 7 if Assigned(FOnRecognition) then8 FOnRecognition(Self, Params[3] {const ISpeechRecoResult}, Params[2]
9 {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