Announcement

Collapse
No announcement yet.

using a 3rd party activex control

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • José Roca
    replied
    You have to use OBJECT CALL/GET because it has a dispatch-only interface, not a dual one. Therefore, direct interface calls can't be used with it.

    Leave a comment:


  • Conrad Hoffman
    replied
    Hurrah! Thank-you, that does it, and yes, I thought it was the file name. I do have to use OBJECT CALL or I get method-or-property-expected error. The first step is hardest, but now that I can get one response from the thing, the rest should come a lot easier. Thanks again.

    Conrad

    Leave a comment:


  • José Roca
    replied
    I guess that you have been confused because the example uses "WMPlayer.OCX", but it happens that this is the ProgID of the Windows Media Player control, whose file name is WMP.DLL.

    Leave a comment:


  • José Roca
    replied
    CONTROL ADD "AtlAxWin", hDlg, %ID_NST, "NstSquiggleCtrl.ocx", 0, 0, 0, 0, %WS_VISIBLE OR %WS_CHILD
    You must not use the name of the OCX, but the ProgID.

    Use:

    Code:
    CONTROL ADD "AtlAxWin", hDlg, %ID_NST, "NSTSQUIGGLECTRL.NstSquiggleCtrlCtrl.1", 0, 0, 0, 0, %WS_VISIBLE OR %WS_CHILD

    Leave a comment:


  • Conrad Hoffman
    replied
    That fixed up the compile, but still no joy with my control. Oddly, the program does succeed in bringingup my dial-up window! This control drops into VB and C++ programs at work- a C++ and VB-centric place, but it would be really nice if I could get it to work through PB. Here's what I tried-

    Code:
    ' attempt to use activex motor controller
    
    #COMPILE EXE
    #DIM ALL
    #INCLUDE ONCE "ATL.INC"               ' from Jose file collection
    #INCLUDE ONCE "NSTSQUIGGLECTRL.INC"   ' from PBrowser
    %ID_NST = 1001
    
    ' ========================================================================================
    ' Main
    ' ========================================================================================
    FUNCTION WINMAIN (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS ASCIIZ PTR, BYVAL nCmdShow AS LONG) AS LONG
    
       LOCAL hDlg AS LONG
       AtlAxWinInit  ' // Initialize ATL - must be called before creating an AtlAxWin71 window
       DIALOG NEW 0, "Motor ActiveX Demo", , , 400, 240, %WS_OVERLAPPED OR %WS_THICKFRAME OR %WS_SYSMENU OR _
       %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR %WS_VISIBLE OR %DS_CENTER TO hDlg
       CONTROL ADD "AtlAxWin", hDlg, %ID_NST, "NstSquiggleCtrl.ocx", 0, 0, 0, 0, %WS_VISIBLE OR %WS_CHILD
    
       DIALOG SHOW MODAL hDlg, CALL DlgProc
    
    END FUNCTION
    ' ========================================================================================
    
    ' ========================================================================================
    ' Main Dialog procedure
    ' ========================================================================================
    CALLBACK FUNCTION DlgProc() AS LONG
    
       LOCAL MotorFunc AS Int__DNstSquiggleCtrl
    
       SELECT CASE CBMSG
    
          CASE %WM_INITDIALOG
             ' Get the IDispatch of the control
             MotorFunc = AtlAxGetDispatch(GetDlgItem(CBHNDL, %ID_NST))
             IF ISTRUE ISOBJECT(MotorFunc) THEN
                MotorFunc.AboutBox()               'error 598, METHOD or PROPERTY name expected
                                                   'if I use OBJECT CALL  or  no function I get a dial up window!
                MotorFunc = NOTHING
             END IF
    
          CASE %WM_COMMAND
             SELECT CASE CBCTL
                CASE %IDOK
                   IF CBCTLMSG = %BN_CLICKED THEN
                   END IF
                CASE %IDCANCEL
                   IF CBCTLMSG = %BN_CLICKED THEN DIALOG END CBHNDL, 0
             END SELECT
    
       END SELECT
    
    END FUNCTION
    ' ========================================================================================
    I've no doubt my problems are due to my complete lack of understanding of this stuff, but maybe it will also help if I post the PBrowser include file I'm using:
    Code:
    ' Generated by: PowerBASIC COM Browser v.2.00.0058
    ' DateTime    : 8/28/2008 at 9:59 PM
    ' ------------------------------------------------
    ' Library Name: NstSquiggleCtrlLib
    ' Library File: C:\Program Files\New Scale Technologies\OcxCtrls\NstSquiggleCtrl.ocx
    ' Description : NstSquiggleCtrl ActiveX Control module
    ' Help File : C:\Program Files\New Scale Technologies\OcxCtrls\NstSquiggleCtrl.hlp
    ' Help Context : 0
    ' GUID : {7E571154-E5EC-4AB6-A1DC-3E18C2438E51}
    ' LCID : 0
    ' Version : 1.0
    
    ' Version Dependant ProgID's
    $PROGID_NstSquiggleCtrlLib_NstSquiggleCtrl1 = "NSTSQUIGGLECTRL.NstSquiggleCtrlCtrl.1"
    
    ' Class Indentifiers
    $CLSID_NstSquiggleCtrlLib_NstSquiggleCtrl = GUID$("{8D226E4F-527B-4DDD-940B-A1D927BB8BCE}")
    $CLSID_NstSquiggleCtrlLib_Event__DNstSquiggleCtrlEvents = GUID$("{47E43D15-CC58-495E-82AD-7C0F52AE5F7C}")
    
    ' Interface Indentifiers
    $IID_NstSquiggleCtrlLib_Int__DNstSquiggleCtrl = GUID$("{6C302104-F021-419C-A3AD-0C8080D10BEE}")
    $IID_NstSquiggleCtrlLib_Int__DNstSquiggleCtrlEvents = GUID$("{CD1D39E3-B43A-4C5A-922B-BD9C1B3393EB}")
    
    ' Macros
    MACRO enumDir = LONG
    MACRO enumUnits = LONG
    MACRO enumTraj = LONG
    
    ' __MIDL___MIDL_itf_NstSquiggleCtrl_0000_0001 enumeration
    %Dir_Reverse = 0
    %Dir_Forward = 1
    
    ' __MIDL___MIDL_itf_NstSquiggleCtrl_0000_0002 enumeration
    %Units_enc = 0
    %Units_nm = 1
    %Units_um = 2
    %Units_mm = 3
    %Units_in = 4
    %Units_uRad = 5
    %Units_Rad = 6
    %Units_aSec = 7
    %Units_deg = 8
    %Units_grad = 9
    
    ' __MIDL___MIDL_itf_NstSquiggleCtrl_0000_0003 enumeration
    %Target_Absolute = 0
    %Target_Relative = 1
    
    
    ' Interface Name  : Int__DNstSquiggleCtrl
    ' Description     : Dispatch interface for NstSquiggleCtrl Control
    ' ClassID         : $CLSID_NstSquiggleCtrlLib_NstSquiggleCtrl
    INTERFACE IDBIND Int__DNstSquiggleCtrl
        MEMBER CALL AboutBox <-552> ()
        MEMBER CALL Get_PortBaudRate <2> (IN PortIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_PortBaudRate <2> (IN PortIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL Get_IsPortOpen <8> (IN PortIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_IsPortOpen <8> (IN PortIndex AS LONG<0>, IN Rhs AS INTEGER<1>)
        MEMBER CALL Get_PortAxes <9> (IN PortIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_PortAxes <9> (IN PortIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL Get_AxisPort <11> (IN AxisIndex AS LONG<0>) AS STRING
        MEMBER CALL Set_AxisPort <11> (IN AxisIndex AS LONG<0>, IN Rhs AS STRING<1>)
        MEMBER CALL Get_PosUnits <12> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_PosUnits <12> (IN AxisIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL Get_SpdUnits <13> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_SpdUnits <13> (IN AxisIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL Get_EncUnits <14> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_EncUnits <14> (IN AxisIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL Get_EncResolution <15> (IN AxisIndex AS LONG<0>) AS DOUBLE
        MEMBER CALL Set_EncResolution <15> (IN AxisIndex AS LONG<0>, IN Rhs AS DOUBLE<1>)
        MEMBER CALL Get_TangentDriveRadius <16> (IN AxisIndex AS LONG<0>) AS DOUBLE
        MEMBER CALL Set_TangentDriveRadius <16> (IN AxisIndex AS LONG<0>, IN Rhs AS DOUBLE<1>)
        MEMBER CALL Get_EncRefEnable <17> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_EncRefEnable <17> (IN AxisIndex AS LONG<0>, IN Rhs AS INTEGER<1>)
        MEMBER CALL Get_CL_Enable <18> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_CL_Enable <18> (IN AxisIndex AS LONG<0>, IN Rhs AS INTEGER<1>)
        MEMBER CALL Get_CL_Interval <19> (IN AxisIndex AS LONG<0>) AS DOUBLE
        MEMBER CALL Set_CL_Interval <19> (IN AxisIndex AS LONG<0>, IN Rhs AS DOUBLE<1>)
        MEMBER CALL Get_Position <20> (IN AxisIndex AS LONG<0>) AS DOUBLE
        MEMBER CALL Set_Position <20> (IN AxisIndex AS LONG<0>, IN Rhs AS DOUBLE<1>)
        MEMBER CALL Get_Status <21> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_Status <21> (IN AxisIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL Get_PosError <22> (IN AxisIndex AS LONG<0>) AS DOUBLE
        MEMBER CALL Set_PosError <22> (IN AxisIndex AS LONG<0>, IN Rhs AS DOUBLE<1>)
        MEMBER CALL Get_OL_SpeedRatio <23> (IN AxisIndex AS LONG<0>) AS DOUBLE
        MEMBER CALL Set_OL_SpeedRatio <23> (IN AxisIndex AS LONG<0>, IN Rhs AS DOUBLE<1>)
        MEMBER CALL Get_OL_DriveMode <24> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_OL_DriveMode <24> (IN AxisIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL QueryPosStatus <25> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL MoveAbsolute <26> (IN AxisIndex AS LONG<0>, IN PB_Target AS DOUBLE<1>) AS LONG
        MEMBER CALL MoveRelative <27> (IN Index AS LONG<0>, IN Distance AS DOUBLE<1>) AS LONG
        MEMBER CALL MoveMtrSteps <28> (IN Index AS LONG<0>, IN Dir AS LONG<1>, IN COUNT AS LONG<2>, IN Period AS DOUBLE<3>, IN _
            DutyCycle AS DOUBLE<4>) AS LONG
        MEMBER CALL FreeRun <29> (IN AxisIndex AS LONG<0>, IN Dir AS LONG<1>, IN Duration AS DOUBLE<2>) AS LONG
        MEMBER CALL STOP <30> (IN AxisIndex AS LONG<0>, IN Decelerate AS INTEGER<1>) AS LONG
        MEMBER CALL GetCL_Speed <31> (IN AxisIndex AS LONG<0>, IN pSpeed AS VARIANT<1>, IN pAccel AS VARIANT<2>, IN pCutoff AS _
            VARIANT<3>) AS LONG
        MEMBER CALL SetCL_Speed <32> (IN AxisIndex AS LONG<0>, IN SPEED AS DOUBLE<1>, IN PB_Accel AS DOUBLE<2>, IN Cutoff AS _
            DOUBLE<3>) AS LONG
        MEMBER CALL GetOL_Speed <33> (IN AxisIndex AS LONG<0>, IN pPercMax AS VARIANT<1>) AS LONG
        MEMBER CALL SetOL_Speed <34> (IN AxisIndex AS LONG<0>, IN PercMax AS DOUBLE<1>) AS LONG
        MEMBER CALL CONNECT <35> () AS LONG
        MEMBER CALL SendString <37> (IN AxisIndex AS LONG<0>, IN newCmd AS STRING<1>) AS STRING
        MEMBER CALL ShowProperties <38> () AS LONG
        MEMBER CALL AddPort <39> (IN PB_Name AS STRING<0>) AS LONG
        MEMBER CALL RemovePort <40> (IN PB_Name AS STRING<0>) AS LONG
        MEMBER CALL UpdateFirmware <41> (IN AxisIndex AS LONG<0>, IN FileName AS STRING<1>, IN AutoStart AS INTEGER<2>) AS LONG
        MEMBER CALL GetCL_PID <42> (IN AxisIndex AS LONG<0>, IN pProportional AS VARIANT<1>, IN pIncremental AS VARIANT<2>, IN _
            pDifferential AS VARIANT<3>) AS LONG
        MEMBER CALL SetCL_PID <43> (IN AxisIndex AS LONG<0>, IN Proportional AS LONG<1>, IN Incremental AS LONG<2>, IN _
            Differential AS LONG<3>) AS LONG
        MEMBER CALL GetCL_MinDriveAmplitude <44> (IN AxisIndex AS LONG<0>, IN pValue AS VARIANT<1>) AS LONG
        MEMBER CALL SetCL_MinDriveAmplitude <45> (IN AxisIndex AS LONG<0>, IN Value AS DOUBLE<1>) AS LONG
        MEMBER CALL GetCL_SoftTravelLimits <46> (IN AxisIndex AS LONG<0>, IN pFwdLimit AS VARIANT<1>, IN pRevLimit AS VARIANT<2>, _
            IN pLimitWindow AS VARIANT<3>) AS LONG
        MEMBER CALL SetCL_SoftTravelLimits <47> (IN AxisIndex AS LONG<0>, IN FwdLimit AS DOUBLE<1>, IN RevLimit AS DOUBLE<2>, IN _
            LimitWindow AS DOUBLE<3>) AS LONG
        MEMBER CALL SetEEPROM_Password <48> (IN AxisIndex AS LONG<0>, IN Password AS STRING<1>) AS LONG
        MEMBER CALL GetEEPROM_String <49> (IN AxisIndex AS LONG<0>, IN Address AS LONG<1>, IN Bytes AS LONG<2>) AS STRING
        MEMBER CALL SetEEPROM_String <50> (IN AxisIndex AS LONG<0>, IN Address AS LONG<1>, IN newVal AS STRING<2>) AS LONG
        MEMBER CALL GetEEPROM_Integer <51> (IN AxisIndex AS LONG<0>, IN Address AS LONG<1>, IN Bytes AS LONG<2>) AS LONG
        MEMBER CALL SetEEPROM_Integer <52> (IN AxisIndex AS LONG<0>, IN Address AS LONG<1>, IN newVal AS LONG<2>, IN Bytes AS _
            LONG<3>) AS LONG
        MEMBER CALL Initialize <53> () AS LONG
        MEMBER CALL ZeroEncoder <54> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL ShowEEPROM <55> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL GetBoardAddress <56> (IN AxisIndex AS LONG<0>, IN pAddress AS VARIANT<1>) AS LONG
        MEMBER CALL SetBoardAddress <57> (IN AxisIndex AS LONG<0>, IN Address AS LONG<1>) AS LONG
        MEMBER CALL GetBoardBaudRate <58> (IN AxisIndex AS LONG<0>, IN PB_Port AS LONG<1>, IN pRateType AS VARIANT<2>) AS LONG
        MEMBER CALL SetBoardBaudRate <59> (IN AxisIndex AS LONG<0>, IN PB_Port AS LONG<1>, IN RateType AS LONG<2>) AS LONG
        MEMBER CALL GetDriveSignal <60> (IN AxisIndex AS LONG<0>, IN pPeriod AS VARIANT<1>, IN pDC1 AS VARIANT<2>, IN pDC2 AS _
            VARIANT<3>, IN pPhase AS VARIANT<4>) AS LONG
        MEMBER CALL SetDriveSignal <61> (IN AxisIndex AS LONG<0>, IN Period AS DOUBLE<1>, IN DC1 AS DOUBLE<2>, IN DC2 AS _
            DOUBLE<3>, IN Phase AS DOUBLE<4>, IN bUpdEEPROM AS INTEGER<5>) AS LONG
        MEMBER CALL IsAxisMultiplexed <62> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL GetSelectedMultiplexedAxis <63> (IN AxisIndex AS LONG<0>, IN pSubAxis AS VARIANT<1>) AS LONG
        MEMBER CALL SetSelectedMultiplexedAxis <64> (IN AxisIndex AS LONG<0>, IN SubAxis AS LONG<1>) AS LONG
        MEMBER CALL IsAxisPresent <65> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Get_EncVendor <66> (IN AxisIndex AS LONG<0>) AS STRING
        MEMBER CALL Set_EncVendor <66> (IN AxisIndex AS LONG<0>, IN Rhs AS STRING<1>)
        MEMBER CALL Get_CL_StallEnable <67> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_CL_StallEnable <67> (IN AxisIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL Get_CL_StallTolerance <68> (IN AxisIndex AS LONG<0>) AS DOUBLE
        MEMBER CALL Set_CL_StallTolerance <68> (IN AxisIndex AS LONG<0>, IN Rhs AS DOUBLE<1>)
        MEMBER CALL ShowTravelLimits <69> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL GetPortName <70> (IN PortIndex AS LONG<0>) AS STRING
        MEMBER CALL GetAxisPortDesc <71> (IN AxisIndex AS LONG<0>) AS STRING
        MEMBER CALL Get_CL_TravelLimitEnable <72> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_CL_TravelLimitEnable <72> (IN AxisIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL Get_CL_StallIncTolerance <73> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL Set_CL_StallIncTolerance <73> (IN AxisIndex AS LONG<0>, IN Rhs AS LONG<1>)
        MEMBER CALL ShowStallTolerance <74> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL LoadTrajectoryFromFile <75> (IN AxisIndex AS LONG<0>, IN PB_Type AS LONG<1>, IN FilePath AS STRING<2>, IN _
            StartRec AS LONG<3>, IN COLUMN AS LONG<4>, IN Delim AS LONG<5>, IN COUNT AS LONG<6>) AS LONG
        MEMBER CALL LoadTrajectoryFromArray <76> (IN AxisIndex AS LONG<0>, IN PB_Type AS LONG<1>, IN pTargets AS VARIANT<2>, IN _
            COUNT AS LONG<3>) AS LONG
        MEMBER CALL StartTrajectory <77> (IN AxisIndex AS LONG<0>, IN StartIndex AS LONG<1>, IN COUNT AS LONG<2>, IN Interval AS _
            DOUBLE<3>, IN Cycles AS LONG<4>, IN CycleDelay AS DOUBLE<5>, IN Flags AS LONG<6>) AS LONG
        MEMBER CALL ShowTrajectorySetup <78> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL ShowLifeTest <79> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL GetEEPROM_Password <80> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL GetLifeTestDlg <81> (IN AxisIndex AS LONG<0>) AS QUAD
        MEMBER CALL StartLifeTest <82> (IN AxisIndex AS LONG<0>, IN Minimize AS LONG<1>) AS LONG
        MEMBER CALL RunUserProgram <83> (IN ID AS LONG<0>, IN CmdStr AS STRING<1>, IN DirStr AS STRING<2>, IN Flags AS LONG<3>) _
            AS LONG
        MEMBER CALL GetUserProgramStatus <84> (IN ID AS LONG<0>) AS LONG
        MEMBER CALL ShowHiResAdcSetup <85> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER CALL MoveMtrStepsWithLimit <86> (IN Index AS LONG<0>, IN Dir AS LONG<1>, IN COUNT AS LONG<2>, IN Period AS _
            DOUBLE<3>, IN DutyCycle AS DOUBLE<4>, IN TravelLimit AS DOUBLE<5>) AS LONG
        MEMBER CALL QueryElapsedStatus <87> (IN Index AS LONG<0>, IN pElapsed AS VARIANT<1>) AS LONG
        MEMBER CALL ShowScanTest <88> (IN AxisIndex AS LONG<0>) AS LONG
        MEMBER GET Ports <1> () AS STRING
        MEMBER LET Ports <1> ()
        MEMBER GET OnErrorThrowException <3> () AS INTEGER
        MEMBER LET OnErrorThrowException <3> ()
        MEMBER GET LastErrorCode <4> () AS LONG
        MEMBER LET LastErrorCode <4> ()
        MEMBER GET LastErrorText <5> () AS STRING
        MEMBER LET LastErrorText <5> ()
        MEMBER GET LastErrorPort <6> () AS STRING
        MEMBER LET LastErrorPort <6> ()
        MEMBER GET PortCount <7> () AS LONG
        MEMBER LET PortCount <7> ()
        MEMBER GET AxisCount <10> () AS LONG
        MEMBER LET AxisCount <10> ()
    END INTERFACE
    
    ' Interface Name  : Int__DNstSquiggleCtrlEvents
    ' Description     : Event interface for NstSquiggleCtrl Control
    ' ClassID         : $CLSID_NstSquiggleCtrlLib_Event__DNstSquiggleCtrlEvents
    CLASS Class_Int__DNstSquiggleCtrlEvents $CLSID_NstSquiggleCtrlLib_Event__DNstSquiggleCtrlEvents AS EVENT
        INTERFACE Int__DNstSquiggleCtrlEvents $IID_NstSquiggleCtrlLib_Int__DNstSquiggleCtrlEvents 
            INHERIT IDISPATCH
    
        END INTERFACE
    END CLASS
    Thanks,
    Conrad

    Leave a comment:


  • José Roca
    replied
    To compile the examples without modification you need to use my new include files instead of the ones provided by PB. You can download them at http://www.jose.it-berater.org/smffo...sg8191#msg8191

    I also have my own browser: http://www.jose.it-berater.org/index.html

    Leave a comment:


  • Conrad Hoffman
    replied
    Hi Jose- the amount of work you've done with this stuff just boggles the mind! I see about what's going on, but can't compile the examples. I assume the two include files are created with the PBrowser (does the version of Media Player matter?), and what file do the equates like %true come from? That's where my compile fails.

    Leave a comment:


  • Conrad Hoffman
    replied
    Thanks- I'll try that tonight!

    Leave a comment:


  • José Roca
    replied
    To use a visual AxtiveX control you need an OLE container. What you have to do depends of the container. Here is an example of how to embed the Windows Media Player ActiveX control using ATL.DLL as the container: http://www.jose.it-berater.org/smffo...p?topic=2714.0

    Leave a comment:


  • Conrad Hoffman
    started a topic using a 3rd party activex control

    using a 3rd party activex control

    This COM stuff isn't as easy as falling off a log, is it? I want to use an ActiveX control provided by the people I work for. It has about 70 functions for controlling a small motor via a USB port. The simplest function just throws an About Box up on the screen, so I thought I'd start there. My objects seem to create ok, but no about box displays. I just modded the MSAgent demo code. Any thoughts on what more I need to do?

    Code:
    'Attempt to use 3rd party ActiveX Control
    
    #COMPILER PBWIN 9
    #COMPILE EXE
    #DIM ALL
    
    %ID_START      = 1000
    %ID_STOP       = 1001
    %ID_EVENTLIST  = 1003
    
    GLOBAL hDlg AS LONG
    
    #INCLUDE "NstSquiggleCtrl.inc"                ' NST ActiveX control file generated by PBrow.exe
    #INCLUDE "Win32api.inc"                       ' Win32 Api include file
    
    CALLBACK FUNCTION DlgProc
      STATIC MotorFunc AS Int__DNstSquiggleCtrl
      STATIC MotorEvents AS Int__DNstSquiggleCtrlEvents
    
      SELECT CASE AS LONG CBMSG
    
        CASE %WM_INITDIALOG
          LET MotorFunc = NEWCOM $PROGID_NstSquiggleCtrlLib_NstSquiggleCtrl1
          IF ISFALSE(ISOBJECT(MotorFunc)) THEN ? "Creation of Motor Object failed" ELSE ? "MotorFunc Object Created OK"
                
          MotorEvents = CLASS "CLASS_Int__DNstSquiggleCtrlEvents"
          IF ISFALSE(ISOBJECT(MotorEvents)) THEN ? "Creation of Motor Events Object failed" ELSE ? " Motor Events Object Created OK"
          
          EVENTS FROM MotorFunc CALL MotorEvents
          
          CONTROL ENABLE CBHNDL, %ID_START
        CASE %WM_COMMAND
          SELECT CASE AS LONG CBCTL
            CASE %ID_START
              IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                OBJECT CALL MotorFunc.AboutBox      '********** NO ABOUT BOX DISPLAYS ***********
                CONTROL DISABLE CBHNDL, %ID_START
                CONTROL ENABLE  CBHNDL, %ID_STOP
              END IF
    
            CASE %ID_STOP
              IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                BEEP
                CONTROL ENABLE  CBHNDL, %ID_START
                CONTROL DISABLE CBHNDL, %ID_STOP
              END IF
          END SELECT
    
        CASE %WM_DESTROY
            IF ISTRUE(ISOBJECT(MotorEvents)) THEN
                EVENTS END MotorEvents
            END IF
    
      END SELECT
    END FUNCTION
    
    FUNCTION PBMAIN () AS LONG
      DIALOG NEW 0, "Squiggle ActiveX Test", 201, 122, 198, 115, %WS_POPUP OR %WS_BORDER OR %WS_DLGFRAME OR %WS_CAPTION OR _
        %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _
        %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
        %WS_EX_RIGHTSCROLLBAR, TO hDlg
      CONTROL ADD BUTTON,  hDlg, %ID_START, "About", 5, 5, 50, 15, %WS_CHILD OR %WS_VISIBLE OR %WS_DISABLED OR _
        %WS_TABSTOP OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_CENTER OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
      CONTROL ADD BUTTON,  hDlg, %ID_STOP, "Stop", 5, 25, 50, 15, %WS_CHILD OR %WS_VISIBLE OR %WS_DISABLED OR _
        %WS_TABSTOP OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_CENTER OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
      'CONTROL ADD LISTBOX, hDlg, %ID_EVENTLIST, , 70, 0, 125, 110,  %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %WS_VSCROLL, _
      '  %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR
    
      DIALOG SHOW MODAL hDlg, CALL DlgProc
    END FUNCTION
Working...
X