BCX COM Interface
BCX_DISPATCHOBJECT function
Purpose: BCX_DISPATCHOBJECT
creates an instance of specified COM OBJECT based on IUnknown
interface passed as a parameter. It is similar to the CREATEOBJECT function which creates
an instance of COM object based on COM object name (registered
progid).
It can be used to manipulate properties/methods of ActiveX objects given ActiveX object IUnknown interface.
Note well that Nothing must be called for each created COM/ActiveX object otherwise memory leaks will occur!
Syntax: COMObj = BCX_DISPATCHOBJECT(iunknown_ptr [,release_param]) Parameters:
Return Value:
|
Example:
'************************************************************************' BCX Media Player (0.3) by Kevin Diggins and Mike Henning' Based on original PBWIN 7.0 code by Jose Roca' Requirements: Windows Media Player, Automatic Template Libraries (ATL)'************************************************************************' Embeds the Windows Media PLayer ACTIVEX control within a BCX Form!'************************************************************************' Ljubisa Knezevic Added new late binding COM code that demonstrates' use of BCX_DispatchObject. It allows easier manipultaion of ActiveX objects.$LIBRARY<oleaut32.lib>$LIBRARY<uuid.lib>#include<oaidl.h>GUI"BCX Media Player"CONSTIDC_CTRL=1001CONSTIDC_BUTT=1002GLOBALhWmpASHWNDGLOBALFormASHWNDGLOBALButtASHWNDGLOBALpUnkASIUnknownPTRGLOBALPth$GLOBALobjWmpasObjectDIMRAWStyle=WS_OVERLAPPEDWINDOW | WS_CLIPCHILDRENSUBFORMLOADBCX_SHOW_COM_ERRORS(TRUE)Pth$=SYSDIR$&"\atl.dll"' Make it work on \WINDOWS\ and \WINNT\ systemsAtlAxWinInit(libPth$)' Initialize ATL libForm=BCX_FORM("BCX Media Player",0,0,300,200, Style, WS_EX_CONTROLPARENT)hWmp=BCX_CONTROL("AtlAxWin", Form,"WMPlayer.OCX", IDC_CTRL,0,0,0,0)Butt=BCX_BUTTON("Load", Form, IDC_BUTT)AtlAxGetControl(libPth$, hWmp,&pUnk)objWmp=BCX_DispatchObject(pUnk, TRUE)' pass IUnknown interface of object,' TRUE - means release pUnk because' we are not going to use it anymore.CENTER(Form)SHOW(Form)IFCOMMAND$>""THENLoadWmp(COMMAND$)ENDSUBBEGINEVENTSDIMRAWrcASRECTSELECTCASECBMSGCASEWM_SYSCOMMAND'*****************************************************' Capture this message and send a WM_DESTROY' message or the program will remain in memory'*****************************************************IF(wParamBAND0xFFF0)=SC_CLOSETHENSendMessage(hWnd, WM_DESTROY, wParam, lParam)EXITFUNCTIONENDIF'*****************************************************CASEWM_COMMANDSELECTCASELOWORD(wParam)CASEIDC_BUTTDIMA$ A$=GETFILENAME$("Open Media File","*.*",0, Form,0,"C:\Recordings")IFA$ >""THENLoadWmp(A$)A$=""ENDIFCASEIDOKIFHIWORD(wParam)=BN_CLICKEDTHENENDIFCASEIDCANCELIFHIWORD(wParam)=BN_CLICKEDTHENSendMessage(hWnd, WM_DESTROY, wParam, lParam)EXITFUNCTIONENDIFENDSELECT'*****************************************************************************************CASEWM_SIZEIFwParam <> SIZE_MINIMIZEDTHENGetClientRect(hWnd,&rc)MoveWindow(GetDlgItem(hWnd,IDC_CTRL),0,25, rc.right-rc.left, rc.bottom-rc.top-25, TRUE)ENDIF'*****************************************************************************************CASEWM_DESTROYSetobjWmp=NothingPostQuitMessage(0)EXITFUNCTION'*****************************************************ENDSELECTENDEVENTSSUBLoadWmp(A$)objWmp.url=A$ENDSUB
For examples of the BCX_DISPATCHOBJECT function see the COM folder in the Files section of the BCX Group on Yahoo.
Related topics: Object data type definition | CreateObject List of all COM Interface Functions