现在有一个用ATL写的Activex控件,已经在VC、C#跟VB中调试通过,工作正常。
但是在delphizho中使用时,回调Onxxxx(int nPos,VARIANT user)事件时会出这样的错误提示:Access Violation at address 0046c806 in module'test.exe' Read of address 00000000.
程序还是可以继续执行。
百思不得其解,望高手指点。谢了先。

解决方案 »

  1.   

    ATl中函数的声明是:
    dispinterface _ISpeakEvents
    {
    properties:
    methods:
    [id(0), helpstring("method SentStart")] void SentenceStart(int nStartPos,VARIANT user);
    };delphi实现是:procedure TForm1.TTSCtrl1SentenceStart(Sender: TObject; nStartPos: Integer; user: OleVariant);
    begin
      
    end;
    在开始执行begin前就出错了。望指点。
    跟踪汇编码时,出错的地方是读取了一个空指针指向的值。
      

  2.   

    CSDN的高手都到哪去了??难道没有懂Activex控件的高手吗??怎么没有人知道原因吗?如果你们没有遇到过这个问题,下面是重现过程:
    在VC里用ATL实现一个空的Activex,然后给连接点事件加一个方法,最好是有两个参数的,
    其中一个参数为int型的,另一个为VARIANT型的。然后把生成对的控件拿到delphi环境下去用。一定要实现连接点的这个方法。这样问题就一定重现。我在试验的过程中发现,如果是两个VARIANT型的也会出错。大家试一试吧。
    希望能碰到高手,可以告知原因。