diff --git a/harbour/ChangeLog b/harbour/ChangeLog index ac0c460938..5f36a978e2 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,12 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-08-20 08:27 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * contrib/hbwin/legacy.prg + * contrib/hbwin/legacyco.c + + Reimplemented numeric pointer support in legacy OLE interface + with the help of Przemek and Antonio. Please test. + 2009-08-20 08:10 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * config/global.mk ! Fixed to handle spaces in PATH elements. diff --git a/harbour/contrib/hbwin/legacy.prg b/harbour/contrib/hbwin/legacy.prg index e8ab1a645a..6fb93da6bc 100644 --- a/harbour/contrib/hbwin/legacy.prg +++ b/harbour/contrib/hbwin/legacy.prg @@ -73,8 +73,6 @@ STATIC PROCEDURE Throw( oError ) Break( oError ) RETURN -/* NOTE: xOle with numeric pointers isn't supported by this - implementation. */ CREATE CLASS TOLEAUTO FROM WIN_OLEAUTO /* TODO: Implement compatibility to the required extent */ VAR cClassName @@ -85,6 +83,9 @@ ENDCLASS METHOD hObj( xOle ) CLASS TOLEAUTO IF PCount() > 0 .AND. xOle != NIL + IF ISNUMBER( xOle ) + xOle := __OLEPDISP( xOle ) + ENDIF IF hb_isPointer( xOle ) ::__hObj := xOle ENDIF @@ -96,6 +97,10 @@ METHOD New( xOle, cClass ) CLASS TOLEAUTO LOCAL hOle LOCAL oError + IF ISNUMBER( xOle ) + xOle := __OLEPDISP( xOle ) + ENDIF + IF hb_isPointer( xOle ) ::__hObj := xOle IF ISCHARACTER( cClass ) @@ -135,6 +140,10 @@ FUNCTION GetActiveObject( xOle, cClass ) LOCAL hOle LOCAL oError + IF ISNUMBER( xOle ) + xOle := __OLEPDISP( xOle ) + ENDIF + IF hb_isPointer( xOle ) o:__hObj := xOle IF ISCHARACTER( cClass ) diff --git a/harbour/contrib/hbwin/legacyco.c b/harbour/contrib/hbwin/legacyco.c index f083ab507b..a74880f2fe 100644 --- a/harbour/contrib/hbwin/legacyco.c +++ b/harbour/contrib/hbwin/legacyco.c @@ -60,6 +60,7 @@ #define HB_OS_WIN_USED #include "hbapi.h" +#include "hbwinole.h" HB_FUNC_EXTERN( WIN_OLEERROR ); @@ -113,3 +114,9 @@ HB_FUNC( MESSAGEBOX ) HB_TCHAR_FREE( lpStr1 ); HB_TCHAR_FREE( lpStr2 ); } + +HB_FUNC( __OLEPDISP ) +{ + hb_oleItemPut( hb_param( -1, HB_IT_ANY ), + ( IDispatch * ) ( HB_PTRUINT ) hb_parnint( 1 ) ); +}