Mindaugas Kavaliauskas wrote:

Use -n compiler switch.

Hmmm, just thick. Thanks.

MSCAL loads as expected, events from MSCAL work well, exiting after loading MSCAL causes a GPF.

BPTI loads as expected (via new param), events from BPTI work well, exiting after loading BPTI causes a GPF.

HTTP loads as expected, events from HTTP work well, exiting after loading HTTP *does not* cause a GPF.

I can start and stop the ActiveX controls as many times as I like, no GPF.

The event handler which I have commented out causes GPFs, see my next e-mail.

I can't make destructors work automatically?

Regards
Alex

#include "hbclass.ch"
#include "windows.ch"
#include "guilib.ch"

function main()
    local oMSCAL
    local oBPTI
    local oHTTP
    local oMainWindow
    INIT WINDOW oMainWindow MAIN TITLE "Hello ActiveX"  ;
            AT 200, 0 SIZE 420, 300
    MENU OF oMainWindow
        MENU TITLE "&File"
MENUITEM "Test MSCal" ACTION { || oMSCAL := HWGActiveX():New( oMainWindow, "MSCAL.Calendar", 0, 0, 300, 300 ) }
            MENUITEM "Change Date" ACTION { || oMSCAL:NextDay() }
            MENUITEM "Kill MSCal" ACTION { || oMSCal:Distroy(), oMSCAL := nil }
            SEPARATOR
MENUITEM "Test BPTI" ACTION { || oBPTI := HWGActiveX():New( oMainWindow, "BPTI.CoBpTiX1", 0, 0, 300, 300, "{F41DF7FB-5014-4859-B4DD-854A9D2143CC}" ) }
            MENUITEM "Init BPTI" ACTION { || oBPTI:InitLan("127.0.0.1", 2000) }
            MENUITEM "Disconnect BPTI" ACTION { || oBPTI:disconnect() }
            MENUITEM "Kill BPTI" ACTION { || oBPTI:Distroy(), oBPTI := nil }
            SEPARATOR
MENUITEM "HTTP" ACTION { || oHTTP := HWGActiveX():New( oMainWindow, "http://www.seamonkey-project.org/start/";, 0, 0, 300, 300 ) }
            MENUITEM "Kill HTTP" ACTION { || oHTTP:Distroy(), oHTTP := nil }
            SEPARATOR
            MENUITEM "E&xit" ACTION { || EndWindow() }
        ENDMENU
    ENDMENU
    ACTIVATE WINDOW oMainWindow
return nil


CLASS HWGActiveX FROM HControl
    CLASS VAR winclass INIT "ACTIVEX"
    DATA oOLE INIT nil
    DATA hWnd INIT nil
    METHOD New
    METHOD Event
    METHOD Distroy
    ERROR HANDLER OnError
    //DESTRUCTOR Destroy
    //DESTRUCTOR Distroy
ENDCLASS

METHOD New( oWnd, cProgId, nTop, nLeft, nWidth, nHeight, cID ) CLASS HWGActiveX
    local nStyle
    nStyle := WS_CHILD + WS_VISIBLE + WS_CLIPCHILDREN
    WIN_AxInit()
::hWnd := WAPI_CreateWindowEX( 0, "AtlAxWin", cProgId, nStyle, nLeft, nTop, nWidth, nHeight, WIN_N2P( oWnd:handle ), 0 ) ::oOLE := WIN_AxGetControl( ::hWnd, { | event, ... | ::Event( event, ... ) }, cID )
return self

// This causes a GPF !!!
//METHOD Event( event, ... ) CLASS HWGActiveX
    //MsgInfo( HB_ValToStr( event ) )
    //MsgInfo( HB_ValToStr( ... ) )
//return nil

METHOD Event( ... ) CLASS HWGActiveX
    local cEvents := ""
    local aEvents := { ... }
    local nHandle
    aEval(aEvents, { | xEvent | cEvents += HB_ValToStr( xEvent ) + ", " } )
    if !file( "Event.Log" )
        nHandle := fcreate( "Event.Log" )
    else
        nHandle := fopen( "Event.Log", 1 )
        fseek( nHandle, 0, 2 )
    endif
    fwrite( nHandle, cEvents + chr( 13 ) + chr( 10 ) )
    fclose( nHandle )
return nil

METHOD Distroy() CLASS HWGActiveX
    MsgInfo( "Bye" )
    DestroyWindow(WIN_P2N(::hWnd))
    ::hWnd := nil
return nil

METHOD OnError() CLASS HWGActiveX
return HB_ExecFromArray( ::oOLE, __GetMessage(), HB_AParams() )

_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to