2005. július 3., vasárnap

Delphi 6 - Imported Automation Events Bug


Problem/Question/Abstract:

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

Nincsenek megjegyzések:

Megjegyzés küldése