• Welcome to Theos PowerBasic Museum 2017.

Simple OCX -- Having Problems

Started by Randal Lanning, January 12, 2010, 05:05:49 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Randal Lanning

Hi all, I hope this is the right place.

I've got a small OCX with only about four functions. I've run both the TypeLib and the COM Browser to generate the include file and they give me the same thing. Using Jose's OLE wrapper, I was able to get it to display the control on a modal dialog.

There are no compile errors however when I get the OBJRESULT back it's &H8000FFFF which comes back with the message "Catastrophic Failure". That tells me nothing. Without further adieu, I'm posting the code to see if anyone can figure out what I might be doing wrong.

Thanks,

Stone


#Compile Exe "HaptekTest"
#tools on
#debug error on

#INCLUDE "OLECON.INC"
#include "Haptek.inc"

%txtResponse = 101
%txtInput = 102
%pic1 = 103
%pic2 = 104
%ID_Haptek = 105

global HapEvents as Int__DActiveHaptekXEvents
global Hap as Int__DActiveHaptekX

function pbmain() as long
 LOCAL hDlg AS LONG
 OC_WinInit
 Dialog New Pixels, 0, "A.L.E.X.I.S.", 0, 0, 1048, 602, %ws_sysmenu To hDlg
 Control Add TextBox, hDlg, %txtResponse, "", 808, 8, 233, 121, %es_readonly or %es_left or %es_multiline or %ws_border
 Control Add TextBox, hDlg, %txtInput, "", 808, 128, 233, 21
 Control Add Button, hDlg, %idok, "&Send", 824, 192, 49, 25, %bs_default
 Control Add Button, hDlg, %idcancel, "&Quit", 824, 220, 49, 25

 CONTROL ADD $OC_CLASSNAME, hDlg, %ID_Haptek, $PROGID_ACTIVEHAPTEKXLib_ActiveHaptekX1, 0, 0, 801, 601, %WS_VISIBLE OR %WS_CHILD

 DIALOG SHOW MODAL hDlg CALL DlgProc
end function

CALLBACK FUNCTION DlgProc() AS LONG

 SELECT CASE CB.MSG
   CASE %WM_INITDIALOG
     ' Get the IDispatch of the control
     Hap = newcom $PROGID_ACTIVEHAPTEKXLib_ActiveHaptekX1
     'Hap = newcom $IID_ACTIVEHAPTEKXLib_Int__DActiveHaptekX
     'var$ = ucode$("\load [file= [data/DefaultAXPlayerStartup.hap] i0= 1]")
     var$ = ucode$("current directory")
     'var$ = "\loadbackgrnd [file= g:/pbwin90/haptek/halwinback.jpg]"
     IF ISOBJECT(Hap) THEN
       object let Hap.Query = var$
       object get Hap.QueryReturn() to x$
       msgbox objresult$(objresult)
       msgbox x$
     END IF

   CASE %WM_COMMAND
     SELECT CASE CB.CTL
       CASE %IDOK
         IF CBCTLMSG = %BN_CLICKED THEN
           Object call Hap.AboutBox()
           msgbox objresult$(objresult)
         END IF
       CASE %IDCANCEL
         IF CB.CTLMSG = %BN_CLICKED THEN DIALOG END CB.HNDL, 0
     END SELECT
 END SELECT
end function


The include:


' Generated by: PowerBASIC COM Browser v.2.00.0058
' DateTime    : 1/18/2009 at 2:33 PM
' ------------------------------------------------
' Library Name: ACTIVEHAPTEKXLib
' Library File: C:\Program Files\Haptek\player\ActiveHaptekX.ocx
' Description : ActiveHaptekX ActiveX Control module
' Help File : C:\Program Files\Haptek\player\ActiveHaptekX.hlp
' Help Context : 0
' GUID : {C6DC0AE2-A7BE-11D2-BDF1-0090271F4931}
' LCID : 0
' Version : 1.0

' Version Dependant ProgID's
$PROGID_ACTIVEHAPTEKXLib_ActiveHaptekX1 = "ACTIVEHAPTEKX.ActiveHaptekXCtrl.1"

' Class Indentifiers
$CLSID_ACTIVEHAPTEKXLib_ActiveHaptekX = GUID$("{C6DC0AE5-A7BE-11D2-BDF1-0090271F4931}")
$CLSID_ACTIVEHAPTEKXLib_Event__DActiveHaptekXEvents = GUID$("{2CDEFD5B-B792-421B-B983-41968A9059BD}")

' Interface Indentifiers
$IID_ACTIVEHAPTEKXLib_Int__DActiveHaptekX = GUID$("{C6DC0AE3-A7BE-11D2-BDF1-0090271F4931}")
$IID_ACTIVEHAPTEKXLib_Int__DActiveHaptekXEvents = GUID$("{C6DC0AE4-A7BE-11D2-BDF1-0090271F4931}")

' Interface Name  : Int__DActiveHaptekX
' Description     : Dispatch interface for ActiveHaptekX Control
' ClassID         : $CLSID_ACTIVEHAPTEKXLib_ActiveHaptekX
Interface IDBind Int__DActiveHaptekX
 Member Call AboutBox <-552> ()
 Member Get HyperText <1> () As String
 Member Let HyperText <1> ()
 Member Get Query <2> () As String
 Member Let Query <2> ()
 Member Get QueryReturn <3> () As String
 Member Let QueryReturn <3> ()
End Interface

' Interface Name  : Int__DActiveHaptekXEvents
' Description     : Event interface for ActiveHaptekX Control
' ClassID         : $CLSID_ACTIVEHAPTEKXLib_Event__DActiveHaptekXEvents
Class Class_Int__DActiveHaptekXEvents $CLSID_ACTIVEHAPTEKXLib_Event__DActiveHaptekXEvents As Event
 Interface Int__DActiveHaptekXEvents $IID_ACTIVEHAPTEKXLib_Int__DActiveHaptekXEvents
   Inherit IDispatch
 End Interface
End Class


José Roca

When using my OLE container to host the OCX, you don't retrieve a reference to the dispatch interface using:


' Get the IDispatch of the control
Hap = newcom $PROGID_ACTIVEHAPTEKXLib_ActiveHaptekX1


but


LOCAL hCtl AS DWORD
CONTROL HANDLE CB.HNDL, %ID_Haptek TO hCtl
Hap = OC_GetDispatch(hCtl)


Randal Lanning

Hey Jose,

Has anyone ever told you that you are a genius? It works perfectly!!!

Thank you so much!

Randal -- Your number one worshiper.