RbBFBlokProjPSIVStrn2007.03 ACnmStrnAChpStrnACsvStrnVer1Strn1 Ver2Strn0 Ver3Strn0 RelsStrn0 NnRlStrn0 RegnStrnSVerStrnLVerStrnIVerStrnaiviInt DVewInt BbprTpInt DLanInt CLanInt DEncInt BflgInt IconGrupEndGInt MacCStrnBMacStrnMy App (Classic)BCarStrnMy Application BCMOStrnMy Application BunIStrnBSizInt @BMSzInt BSzSStrn4096BMSSStrn2048MDIcStrnBWinStrnMy Application.exe BMDIInt WcmNStrnWpNmStrnWiNmStrnBL86Strn MyApplication PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjGNameStrn IDataObject ContInt OpaswStrnbClsInt flagInt bNtrInt CompStrnMethGrupnameStrnDAdvise CompStrnVsblInt sorcGrupEncoInt srclStrnrFunction DAdvise(data as Integer, advf as Integer, IAdviseSink as Integer, ByRef connection as Integer) As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnUdata as Integer, advf as Integer, IAdviseSink as Integer, ByRef connection as Integer rsltStrnInteger EndGInt MethGrup(nameStrn DUnadvise CompStrnVsblInt sorcGruptEncoInt srclStrn4Function DUnadvise(connection as Integer) As IntegersrclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnconnection as Integer rsltStrnInteger EndGInt MethGrup<nameStrn EnumDAdvise CompStrnVsblInt sorcGrupEncoInt srclStrn?Function EnumDAdvise(ByRef IEnumSTATDATA as Integer) As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnByRef IEnumSTATDATA as Integer rsltStrnInteger EndGInt MethGruppnameStrn EnumFormatEtc CompStrnVsblInt sorcGrupEncoInt srclStrnXFunction EnumFormatEtc(direction as Integer, ByRef IEnumFORMATETC as Integer) As IntegersrclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn5direction as Integer, ByRef IEnumFORMATETC as Integer rsltStrnInteger EndGInt MethGruplnameStrnGetCanonicalFormatEtc CompStrnVsblInt sorcGrupEncoInt srclStrnVFunction GetCanonicalFormatEtc(dataIn as Integer, ByRef dataOut as Integer) As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn+dataIn as Integer, ByRef dataOut as Integer rsltStrnInteger EndGInt MethGrupHnameStrnGetData CompStrnVsblInt sorcGrupEncoInt srclStrnEFunction GetData(data as Integer, ByRef output as Integer) As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn(data as Integer, ByRef output as IntegerrsltStrnInteger EndGInt MethGrupPnameStrn GetDataHere CompStrnVsblInt sorcGrupEncoInt srclStrnIFunction GetDataHere(data as Integer, ByRef output as Integer) As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn(data as Integer, ByRef output as IntegerrsltStrnInteger EndGInt MethGrup nameStrn QueryGetDataCompStrnVsblInt sorcGruptEncoInt srclStrn1Function QueryGetData(data as Integer) As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrndata as Integer rsltStrnInteger EndGInt MethGrupdnameStrnSetData CompStrnVsblInt sorcGrupEncoInt srclStrnSFunction SetData(data as Integer, medium as Integer, release as Boolean) As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn6data as Integer, medium as Integer, release as Boolean rsltStrnInteger EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt PadnPadnl************************************************************************************************************BlokpObjBwNameStrnIUnknownContInt OpaswStrnbClsInt flagInt bNtrInt CompStrnMethGrupnameStrnAddRef CompStrnVsblInt sorcGrup\EncoInt srclStrnFunction AddRef() As IntegersrclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt MethGrupnameStrnRelease CompStrnVsblInt sorcGrup`EncoInt srclStrnFunction Release() As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt MethGrupTnameStrnQueryInterface CompStrnVsblInt sorcGrupEncoInt srclStrnJFunction QueryInterface(refid as Integer, ByRef out as Integer) As Integer srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn&refid as Integer, ByRef out as Integer rsltStrnInteger EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjGNameStrnApp ContInt paswStrnbClsInt SuprStrn Application flagInt bNtrInt bApOInt CompStrnPDefGrup$nameStrnMenuBar PValInt EndGInt VwBhGrupEndGInt CnstGrupEncoInt nameStrnkFileQuitShortcut typeInt defnStrnflagInt CInsGrup0pltfInt langInt defnStrnCmd+Q EndGInt EndGInt CnstGrupEncoInt nameStrn kFileQuit typeInt defnStrnQuitflagInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt EndGInt CnstGrupEncoInt nameStrn kEditClear typeInt defnStrnClear flagInt CInsGrup0pltfInt langInt defnStrn&Delete EndGInt CInsGrup0pltfInt langInt defnStrn&Delete EndGInt EndGInt PadnPadnX****************************************************************************************BlokpVewBb$NameStrnWindow1 ContInt paswStrnbClsInt SuprStrnWindow flagInt bNtrInt CompStrnPDefGrup0nameStrnMenuBar PValStrn 293842943 EndGInt PDefGrup(nameStrn MacProcID PValInt EndGInt PDefGrup4nameStrn BalloonHelp EncoInt PValStrnEndGInt PDefGrup0nameStrnMinimizeButton PValStrnTrueEndGInt PDefGrup4nameStrnMaximizeButton PValStrnFalse EndGInt PDefGrup0nameStrn LiveResize PValStrnFalse EndGInt PDefGrup0nameStrn Resizeable PValStrnFalse EndGInt PDefGrup,nameStrn CloseButton PValStrnTrueEndGInt PDefGrup0nameStrnMenuBarVisible PValStrnTrueEndGInt PDefGrup0nameStrn FullScreen PValStrnFalse EndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup8nameStrnTitle EncoInt PValStrnUntitledEndGInt PDefGrup$nameStrnBackdropPValStrnEndGInt PDefGrup(nameStrn BackColor PValInt EndGInt PDefGrup0nameStrn HasBackColorPValStrnFalse EndGInt PDefGrup0nameStrn Composite PValStrnFalse EndGInt PDefGrup$nameStrnFrame PValInt EndGInt PDefGrup(nameStrn MaxHeight PValInt }EndGInt PDefGrup$nameStrnMaxWidthPValInt }EndGInt PDefGrup(nameStrn MinHeight PValInt @EndGInt PDefGrup$nameStrnMinWidthPValInt @EndGInt PDefGrup$nameStrnHeight PValInt ,EndGInt PDefGrup$nameStrnWidth PValInt ,EndGInt PDefGrup(nameStrn Placement PValInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnWindow EndGInt VwPrGrupLNameStrn Interfaces VsblInt PrGpStrnID CPifStrnWindow EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnWindow EndGInt VwPrGrup0NameStrn Placement VsblInt PrGpStrnPositionPValStrn0 typeStrnInteger vbETStrnEnumCPifStrnWindow EnumGrupdefnStrn 0 - Default defnStrn1 - Parent Window defnStrn2 - Main Screen defnStrn3 - Parent Window ScreendefnStrn 4 - Stagger EndGInt EndGInt VwPrGruppNameStrnWidth VsblInt PrGpStrnPositionPValStrn300 typeStrnInteger CPifStrnWindow EndGInt VwPrGruppNameStrnHeight VsblInt PrGpStrnPositionPValStrn300 typeStrnInteger CPifStrnWindow EndGInt VwPrGruppNameStrnMinWidthVsblInt PrGpStrnPositionPValStrn64 typeStrnInteger CPifStrnWindow EndGInt VwPrGruptNameStrn MinHeight VsblInt PrGpStrnPositionPValStrn64 typeStrnInteger CPifStrnWindow EndGInt VwPrGruptNameStrnMaxWidthVsblInt PrGpStrnPositionPValStrn32000 typeStrnInteger CPifStrnWindow EndGInt VwPrGrupxNameStrn MaxHeight VsblInt PrGpStrnPositionPValStrn32000 typeStrnInteger CPifStrnWindow EndGInt VwPrGrup  NameStrnFrame VsblInt PrGpStrn Appearance PValStrn0 typeStrnInteger vbETStrnEnumCPifStrnWindow EnumGrupp defnStrn 0 - DocumentdefnStrn1 - Movable Modal defnStrn2 - Modal DialogdefnStrn3 - Floating Window defnStrn 4 - Plain Box defnStrn5 - Shadowed BoxdefnStrn6 - Rounded Window defnStrn7 - Global Floating Window defnStrn8 - Sheet WindowdefnStrn9 - Metal WindowdefnStrn10 - Drawer Window defnStrn11 - Modeless DialogEndGInt  EndGInt  VwPrGrup| NameStrn Composite VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt  VwPrGrup| NameStrn HasBackColorVsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt  VwPrGrup| NameStrn BackColor VsblInt PrGpStrn Appearance PValStrn&hFFFFFFtypeStrnColor CPifStrnWindow EndGInt  VwPrGrupxNameStrnBackdropVsblInt PrGpStrn Appearance typeStrnPicture vbETStrnPicture CPifStrnWindow EndGInt VwPrGrupxNameStrnTitle VsblInt PrGpStrn Appearance PValStrnUntitledtypeStrnString CPifStrnWindow EndGInt VwPrGruptNameStrnVisible VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt VwPrGrup|NameStrn FullScreen VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt VwPrGrup|NameStrnMenuBarVisible VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt VwPrGrupxNameStrn CloseButton VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt VwPrGrup|NameStrn Resizeable VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt VwPrGrupxNameStrn LiveResize VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt VwPrGrupNameStrnMaximizeButton VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt VwPrGrup|NameStrnMinimizeButton VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt VwPrGruphNameStrn BalloonHelp VsblInt PrGpStrn Appearance typeStrnString CPifStrnWindow EndGInt VwPrGrupxNameStrn MacProcID VsblInt PrGpStrn Appearance PValStrn0 typeStrnInteger CPifStrnWindow EndGInt VwPrGrupxNameStrnMenuBar VsblInt PrGpStrn Appearance typeStrnMenuBar vbETStrnMenuBar CPifStrnWindow EndGInt EndGInt CBhvGrupdSuprStrn PushButton HInsGrup0nameStrnAction CompStrnVsblInt sorcGrupEncoInt srclStrn Sub Action()srclStrndim IGeneric as MemoryBlock srclStrnsrclStrn8IGeneric = COMWrappers.DoTheMagicDance( new RBCOMClass )srclStrnsrclStrn8Declare Sub CoInitialize Lib "Ole32" ( zero as Integer )srclStrnCoInitialize( 0 ) srclStrnMDeclare Function OleSetClipboard Lib "ole32" ( dataObject as Ptr ) as Integer srclStrnsrclStrn0dim res as Integer = OleSetClipboard( IGeneric )srclStrnsrclStrnBreak srclStrnEnd Sub EndGInt EndGInt EndGInt CtrlGrupcclsStrn PushButton nameStrn PushButton PDefGrup8nameStrn InitialParent EncoInt PValStrnEndGInt PDefGrup( nameStrn Underline PValStrnEndGInt  PDefGrup$!nameStrnItalic PValStrnEndGInt !PDefGrup "nameStrnBoldPValStrnEndGInt "PDefGrup$#nameStrnTextSizePValInt EndGInt #PDefGrup8$nameStrnTextFontEncoInt PValStrnSystem EndGInt $PDefGrup0%nameStrnAutoDeactivate PValStrnTrueEndGInt %PDefGrup0&nameStrnHelpTag EncoInt PValStrnEndGInt &PDefGrup('nameStrnVisible PValStrnTrueEndGInt 'PDefGrup((nameStrnEnabled PValStrnTrueEndGInt (PDefGrup$)nameStrnCancel PValStrnEndGInt )PDefGrup$*nameStrnDefault PValStrnEndGInt *PDefGrup8+nameStrnCaption EncoInt PValStrnUntitledEndGInt +PDefGrup,,nameStrn TabPanelIndex PValInt EndGInt ,PDefGrup(-nameStrn LockBottom PValStrnEndGInt -PDefGrup(.nameStrn LockRight PValStrnEndGInt .PDefGrup$/nameStrnLockTop PValStrnEndGInt /PDefGrup$0nameStrnLockLeftPValStrnEndGInt 0PDefGrup$1nameStrnHeight PValInt EndGInt 1PDefGrup$2nameStrnWidth PValInt PEndGInt 2PDefGrup 3nameStrnTop PValInt EndGInt 3PDefGrup 4nameStrnLeftPValInt EndGInt 4PDefGrup85nameStrn ControlOrderEncoInt PValStrn0 EndGInt 5PDefGrup<6nameStrnSuper EncoInt PValStrn PushButton EndGInt 6PDefGrup$7nameStrnIndex PValInt EndGInt 7PDefGrup88nameStrnNameEncoInt PValStrn PushButton1 EndGInt 8CBixInt EndGInt PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpMnu NameStrnMenuBar1ContInt paswStrnMItmGrupp9spmuInt nameStrnFileMenutextStrn&File indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrup:spmuInt nameStrnFileQuittextStrn#App.kFileQuit indxInt scutStrn#App.kFileQuitShortcut MiSKStrn#App.kFileQuitShortcut maEnInt EncoInt flagInt SuprStrn QuitMenuItemEndGInt :EndGInt 9MItmGrup\;spmuInt nameStrnEditMenutextStrn&Edit indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupspmuInt nameStrnEditCut textStrnCu&tindxInt scutStrnCmd+X MiSKStrnX MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt >MItmGrup?spmuInt nameStrnEditCopytextStrn&Copy indxInt scutStrnCmd+C MiSKStrnC MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt ?MItmGrup@spmuInt nameStrn EditPaste textStrn&Paste indxInt scutStrnCmd+V MiSKStrnV MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt @MItmGrupAspmuInt nameStrn EditClear textStrn#App.kEditClear indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt AMItmGrupBspmuInt nameStrn UntitledMenu0 textStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt BMItmGrupCspmuInt nameStrn EditSelectAll textStrn Select &All indxInt scutStrnCmd+A MiSKStrnA MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt CEndGInt ;PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpFolONameStrnCOM Interfaces ContInt paswStrnPadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj/j<NameStrn COMWrappers ContInt paswStrnbClsInt flagInt bNtrInt CompStrnMethGrupHDnameStrnDoTheMagicDance CompStrnVsblInt sorcGrup EEncoInt srclStrn8Function DoTheMagicDance(c as RBCOMClass) As MemoryBlocksrclStrn4if mObjectMap = nil then mObjectMap = new DictionarysrclStrnsrclStrn@// Check to see if we already have this class in our object map.srclStrn?// If we do, then we just want to pass back the original memory srclStrn // block. srclStrn0dim test as MemoryBlock = ClassToCOMPointer( c )srclStrnif test <> nil then return test srclStrnsrclStrn?Declare Function malloc Lib "msvcrt" ( size as Integer ) as Ptr srclStrnsrclStrnE// First, we need to create a COM object itself. This is laid out in srclStrn// memory like this:srclStrn// srclStrn$// p vTable QueryInterfacesrclStrn"// AddRef srclStrn#// ... Release srclStrn// other stuffsrclStrn// srclStrn4// So what we're going to do is quite simple. We'resrclStrn1// going to make a memory block for "p" that hold srclStrn2// two pieces of information. One is a Ptr to the srclStrn-// vTable MemoryBlock. The other is a way to srclStrn7// identify which class instance it is that we need to srclStrn5// call the COM methods on. We're essentially acting srclStrn2// as an in-place proxy server for the COM object. srclStrnsrclStrn5// First, create the memory block for the COM object. srclStrn:// It's going to be 4 bytes long since it only holds a Ptr srclStrn// to the vTablesrclStrn"dim comObject as Ptr = malloc( 4 ) srclStrnsrclStrn2// Now we're going to make the COM object's vTable srclStrn5// This needs four bytes for each method that we need srclStrn // to expose. srclStrn$dim vTable as Ptr = malloc( 4 * 12 )srclStrnsrclStrn1// The next thing we need to do is construct the srclStrn2// vTable for the COM object. We do this by using srclStrn6// the AddressOf operator and pass in methods declared srclStrn// within this module. srclStrnsrclStrn6// Here's the IUnknown interface that every COM object srclStrn// must implement srclStrn*vTable.Ptr( 0 ) = AddressOf QueryInterface srclStrn"vTable.Ptr( 4 ) = AddressOf AddRef srclStrn#vTable.Ptr( 8 ) = AddressOf Release srclStrnsrclStrn2// And here's the IDataObject interface that we're srclStrn// interested in implementing. srclStrn$vTable.Ptr( 12 ) = AddressOf GetDatasrclStrn(vTable.Ptr( 16 ) = AddressOf GetDataHeresrclStrn)vTable.Ptr( 20 ) = AddressOf QueryGetData srclStrn2vTable.Ptr( 24 ) = AddressOf GetCanonicalFormatEtc srclStrn$vTable.Ptr( 28 ) = AddressOf SetDatasrclStrn*vTable.Ptr( 32 ) = AddressOf EnumFormatEtc srclStrn$vTable.Ptr( 36 ) = AddressOf DAdvisesrclStrn&vTable.Ptr( 40 ) = AddressOf DUnadvise srclStrn(vTable.Ptr( 44 ) = AddressOf EnumDAdvisesrclStrnsrclStrn(// Now let's set the COM object's vTablesrclStrncomObject.Ptr( 0 ) = vTable srclStrnsrclStrn0// And set the COM object's extra information sosrclStrn4// that we can locate the RB object we're interestedsrclStrn// in. srclStrn%dim comObjectPtr as Ptr = malloc( 4 ) srclStrn!comObjectPtr.Ptr( 0 ) = comObject srclStrnsrclStrn"// Add the class to our object map srclStrn/mObjectMap.Value( comObjectPtr.Int32( 0 ) ) = c srclStrnsrclStrn3// Now we can return our instance of the COM object srclStrnreturn comObjectsrclStrn End FunctionEndGInt EEncoInt AlasStrnflagInt shrdInt parmStrnc as RBCOMClass rsltStrn MemoryBlock EndGInt DMethGruppFnameStrnAddRef CompStrnVsblInt sorcGrupGEncoInt srclStrn+Function AddRef(this as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrn7if mappedClass <> nil and mappedClass IsA IUnknown then srclStrn%return IUnknown( mappedClass ).AddRef srclStrnend if srclStrnsrclStrnreturn 0srclStrn End FunctionEndGInt GEncoInt AlasStrnflagInt !shrdInt parmStrnthis as Integer rsltStrnInteger EndGInt FMethGrupHnameStrnQueryInterface CompStrnVsblInt sorcGrup(IEncoInt srclStrnbFunction QueryInterface(this as Integer, riid as Integer, ByRef objToReturn as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrn8if mappedClass <> nil and mappedClass IsA IUnknown then srclStrnBreturn IUnknown( mappedClass ).QueryInterface( riid, objToReturn ) srclStrnend if srclStrnsrclStrnreturn 0srclStrn End FunctionEndGInt IEncoInt AlasStrnflagInt !shrdInt parmStrn>this as Integer, riid as Integer, ByRef objToReturn as Integer rsltStrnInteger EndGInt HMethGrupJnameStrnRelease CompStrnVsblInt sorcGrup(KEncoInt srclStrn,Function Release(this as Integer) As IntegersrclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrn7if mappedClass <> nil and mappedClass IsA IUnknown then srclStrn7dim count as Integer = IUnknown( mappedClass ).Release srclStrn+if count = 0 then mObjectMap.Remove( this ) srclStrn return countsrclStrnend if srclStrnsrclStrnreturn 0srclStrn End FunctionEndGInt KEncoInt AlasStrnflagInt !shrdInt parmStrnthis as Integer rsltStrnInteger EndGInt JMethGrupLnameStrnGetData CompStrnVsblInt sorcGrupMEncoInt srclStrnVFunction GetData(this as Integer, data as Integer, ByRef output as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrntif mappedClass <> nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).GetData( data, output )srclStrn End FunctionEndGInt MEncoInt AlasStrnflagInt !shrdInt parmStrn9this as Integer, data as Integer, ByRef output as Integer rsltStrnInteger EndGInt LMethGrupNnameStrn GetDataHere CompStrnVsblInt sorcGrupOEncoInt srclStrnZFunction GetDataHere(this as Integer, data as Integer, ByRef output as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrnxif mappedClass <> nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).GetDataHere( data, output )srclStrn End FunctionEndGInt OEncoInt AlasStrnflagInt !shrdInt parmStrn9this as Integer, data as Integer, ByRef output as Integer rsltStrnInteger EndGInt NMethGrup|PnameStrn QueryGetDataCompStrnVsblInt sorcGrupQEncoInt srclStrnBFunction QueryGetData(this as Integer, data as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrnqif mappedClass <> nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).QueryGetData( data ) srclStrn End FunctionEndGInt QEncoInt AlasStrnflagInt !shrdInt parmStrn this as Integer, data as IntegerrsltStrnInteger EndGInt PMethGrupRnameStrnGetCanonicalFormatEtc CompStrnVsblInt sorcGrupSEncoInt srclStrngFunction GetCanonicalFormatEtc(this as Integer, dataIn as Integer, ByRef dataOut as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrnif mappedClass <> nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).GetCanonicalFormatEtc( dataIn, dataOut ) srclStrn End FunctionEndGInt SEncoInt AlasStrnflagInt !shrdInt parmStrn nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).SetData( data, medium, release ) srclStrn End FunctionEndGInt UEncoInt AlasStrnflagInt !shrdInt parmStrnGthis as Integer, data as Integer, medium as Integer, release as Boolean rsltStrnInteger EndGInt TMethGrupVnameStrn EnumFormatEtc CompStrnVsblInt sorcGrupWEncoInt srclStrniFunction EnumFormatEtc(this as Integer, direction as Integer, ByRef IEnumFORMATETC as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrnif mappedClass <> nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).EnumFormatEtc( direction, IEnumFORMATETC ) srclStrn End FunctionEndGInt WEncoInt AlasStrnflagInt !shrdInt parmStrnFthis as Integer, direction as Integer, ByRef IEnumFORMATETC as Integer rsltStrnInteger EndGInt VMethGrupXnameStrnDAdvise CompStrnVsblInt sorcGrupYEncoInt srclStrnFunction DAdvise(this as Integer, data as Integer, advf as Integer, IAdviseSink as Integer, ByRef connection as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrnif mappedClass <> nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).DAdvise( data, advf, IAdviseSink, connection ) srclStrn End FunctionEndGInt YEncoInt AlasStrnflagInt !shrdInt parmStrnfthis as Integer, data as Integer, advf as Integer, IAdviseSink as Integer, ByRef connection as Integer rsltStrnInteger EndGInt XMethGrupZnameStrn DUnadvise CompStrnVsblInt sorcGrup[EncoInt srclStrnEFunction DUnadvise(this as Integer, connection as Integer) As Integer srclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrntif mappedClass <> nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).DUnadvise( connection )srclStrn End FunctionEndGInt [EncoInt AlasStrnflagInt !shrdInt parmStrn&this as Integer, connection as Integer rsltStrnInteger EndGInt ZMethGrup\nameStrn EnumDAdvise CompStrnVsblInt sorcGrup]EncoInt srclStrnPFunction EnumDAdvise(this as Integer, ByRef IEnumSTATDATA as Integer) As IntegersrclStrn$#pragma X86CallingConvention StdCallsrclStrnsrclStrn// Find the object in our map srclStrn:dim mappedClass as Object = mObjectMap.Lookup( this, nil ) srbpInt srclStrnsrclStrnyif mappedClass <> nil and mappedClass IsA IDataObject then return IDataObject( mappedClass ).EnumDAdvise( IEnumSTATDATA ) srclStrn End FunctionEndGInt ]EncoInt AlasStrnflagInt !shrdInt parmStrn/this as Integer, ByRef IEnumSTATDATA as Integer rsltStrnInteger EndGInt \MethGrup^nameStrnClassToCOMPointer CompStrnVsblInt sorcGrup8_EncoInt srclStrn6Function ClassToCOMPointer(c as Object) As MemoryBlock srclStrn#if mObjectMap = nil then return nil srclStrnsrclStrn+dim keys( -1 ) as Variant = mObjectMap.Keys srclStrnfor each key as Variant in keys srclStrn1if mObjectMap.Value( key.IntegerValue ) Is c then srclStrn(dim comObjectPtr as new MemoryBlock( 4 )srclStrn)comObjectPtr.Long( 0 ) = key.IntegerValue srclStrnsrclStrnreturn comObjectPtr.Ptr( 0 )srclStrnend if srclStrnnext keysrclStrnsrclStrn return nil srclStrn End FunctionEndGInt _EncoInt AlasStrnflagInt shrdInt parmStrn c as Object rsltStrn MemoryBlock EndGInt ^MethGrup`nameStrnMemoryBlockToIntegerCompStrnVsblInt sorcGrupaEncoInt srclStrn;Function MemoryBlockToInteger(mb as MemoryBlock) As Integer srclStrn(dim comObjectPtr as new MemoryBlock( 4 )srclStrncomObjectPtr.Ptr( 0 ) = mb srclStrnsrclStrnreturn comObjectPtr.Long( 0 ) srclStrnsrclStrn End FunctionEndGInt aEncoInt AlasStrnflagInt shrdInt parmStrnmb as MemoryBlock rsltStrnInteger EndGInt `PropGrupXbEncoInt declStrnmObjectMap As DictionaryflagInt !CompStrnshrdInt EndGInt bVwBhGrupcVwPrGrupDdNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt dVwPrGrup`eNameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt eVwPrGrupHfNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt fVwPrGrupXgNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt gVwPrGrupXhNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt hEndGInt cCnstGrupHiEncoInt nameStrnS_OKtypeInt defnStrn0 flagInt EndGInt iCnstGrupXjEncoInt nameStrn E_NOTIMPL typeInt defnStrn &h0004001 flagInt EndGInt jPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj0oNameStrn RBCOMClass ContInt paswStrnbClsInt IntrStrnIUnknown, IDataObject flagInt bNtrInt CompStrnMethGrupknameStrnAddRef CompStrnVsblInt sorcGruplEncoInt srclStrnFunction AddRef() As IntegersrclStrnYDeclare Function InterlockedIncrement Lib "Kernel32" ( ByRef data as Integer ) as Integer srclStrnsrclStrn(return InterlockedIncrement( mRefCount )srclStrn End FunctionEndGInt lEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt kMethGrupmnameStrnQueryInterface CompStrnVsblInt sorcGrupnEncoInt srclStrnJFunction QueryInterface(refid as Integer, ByRef out as Integer) As Integer srclStrn3// refid points to a GUID for the object the caller srclStrn// is trying to get out of us. srclStrnsrclStrn@dim comObject as MemoryBlock = COMWrappers.DoTheMagicDance( me )srclStrnsrclStrn3out = COMWrappers.MemoryBlockToInteger( comObject ) srclStrnsrclStrnreturn COMWrappers.S_OK srclStrn End FunctionEndGInt nEncoInt AlasStrnflagInt shrdInt parmStrn&refid as Integer, ByRef out as Integer rsltStrnInteger EndGInt mMethGruponameStrnRelease CompStrnVsblInt sorcGrup8pEncoInt srclStrnFunction Release() As Integer srclStrnYDeclare Function InterlockedDecrement Lib "Kernel32" ( ByRef data as Integer ) as Integer srclStrnsrclStrn9dim nCount as Integer = InterlockedDecrement( mRefCount ) srclStrnsrclStrn return nCount srclStrn End FunctionEndGInt pEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt oMethGrupqnameStrnDAdvise CompStrnVsblInt sorcGruprEncoInt srclStrnrFunction DAdvise(data as Integer, advf as Integer, IAdviseSink as Integer, ByRef connection as Integer) As Integer srclStrnBreak srclStrnsrclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt rEncoInt AlasStrnflagInt shrdInt parmStrnUdata as Integer, advf as Integer, IAdviseSink as Integer, ByRef connection as Integer rsltStrnInteger EndGInt qMethGrupXsnameStrn DUnadvise CompStrnVsblInt sorcGruptEncoInt srclStrn4Function DUnadvise(connection as Integer) As IntegersrclStrnBreak srclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt tEncoInt AlasStrnflagInt shrdInt parmStrnconnection as Integer rsltStrnInteger EndGInt sMethGruplunameStrn EnumDAdvise CompStrnVsblInt sorcGrupvEncoInt srclStrn?Function EnumDAdvise(ByRef IEnumSTATDATA as Integer) As Integer srclStrnBreak srclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt vEncoInt AlasStrnflagInt shrdInt parmStrnByRef IEnumSTATDATA as Integer rsltStrnInteger EndGInt uMethGrupwnameStrn EnumFormatEtc CompStrnVsblInt sorcGrupxEncoInt srclStrnXFunction EnumFormatEtc(direction as Integer, ByRef IEnumFORMATETC as Integer) As IntegersrclStrnBreak srclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt xEncoInt AlasStrnflagInt shrdInt parmStrn5direction as Integer, ByRef IEnumFORMATETC as Integer rsltStrnInteger EndGInt wMethGrupynameStrnGetCanonicalFormatEtc CompStrnVsblInt sorcGrupzEncoInt srclStrnVFunction GetCanonicalFormatEtc(dataIn as Integer, ByRef dataOut as Integer) As Integer srclStrnBreak srclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt zEncoInt AlasStrnflagInt shrdInt parmStrn+dataIn as Integer, ByRef dataOut as Integer rsltStrnInteger EndGInt yMethGrupx{nameStrnGetData CompStrnVsblInt sorcGrup|EncoInt srclStrnEFunction GetData(data as Integer, ByRef output as Integer) As Integer srclStrnBreak srclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt |EncoInt AlasStrnflagInt shrdInt parmStrn(data as Integer, ByRef output as IntegerrsltStrnInteger EndGInt {MethGrup}nameStrn GetDataHere CompStrnVsblInt sorcGrup~EncoInt srclStrnIFunction GetDataHere(data as Integer, ByRef output as Integer) As Integer srclStrnBreak srclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt ~EncoInt AlasStrnflagInt shrdInt parmStrn(data as Integer, ByRef output as IntegerrsltStrnInteger EndGInt }MethGrupPnameStrn QueryGetDataCompStrnVsblInt sorcGrupEncoInt srclStrn1Function QueryGetData(data as Integer) As Integer srclStrnBreak srclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrndata as Integer rsltStrnInteger EndGInt MethGrupnameStrnSetData CompStrnVsblInt sorcGrupEncoInt srclStrnSFunction SetData(data as Integer, medium as Integer, release as Boolean) As Integer srclStrnBreak srclStrnsrclStrnreturn COMWrappers.E_NOTIMPLsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn6data as Integer, medium as Integer, release as Boolean rsltStrnInteger EndGInt PropGrupTEncoInt declStrnmRefCount As IntegerflagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpUIsWnStGrupOTabGrupContInt eSptInt EndGInt OTabGrup4ContInt 0oAltEInt LSptInt ciIDInt EndGInt OTabGrupdContInt BbLSptInt RSptInt ScrXInt ScrYInt lstHInt @lstVInt @CtrlInt EndGInt OTabGrup4ContInt BbAltEInt LSptInt ciIDInt EndGInt OTabGrup4ContInt /jAltEInt LSptInt ciIDInt EndGInt LsLcStrnCOMWrappers.DoTheMagicDance rEdtRect0AEndGInt PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************EOF!