Page 3 of 5

Re: Just upgraded to 3.0.38, but have problem...

Posted: Wed Aug 03, 2011 6:35 pm
by l3whmg
Hi guys,
I find the solution: the problems seem to come from nightly version. This version is target as 3.1.x rev. 169.... that is different from official 3.0.0 rev. 16951.
I don't know exactly where is the problem, but I can't find "FREELIBRARY" and "TOLEAUTO" with nightly version.
Cheers

Re: Just upgraded to 3.0.38, but have problem...

Posted: Wed Aug 03, 2011 6:52 pm
by gfilatov
l3whmg wrote:Hi guys,
I find the solution: the problems seem to come from nightly version. This version is target as 3.1.x rev. 169.... that is different from official 3.0.0 rev. 16951.
I don't know exactly where is the problem, but I can't find "FREELIBRARY" and "TOLEAUTO" with nightly version.
Hi Luigi,

You are right ;)

These functions were moved to legacy source of hbwin library and they were erased in the current harbour 3.1.0dev build after cleanup of the legacy codes.

Hope that helps. :idea:

Re: Just upgraded to 3.0.38, but have problem...

Posted: Wed Aug 03, 2011 7:19 pm
by l3whmg
Hi Grigory, many thanks for your info. As usual, you are very prepared ;)
Cheers

Re: Just upgraded to 3.0.38, but have problem...

Posted: Thu Aug 04, 2011 12:41 am
by Rathinagiri
Thanks for the info Grigory.

In that case, where can we find these functionalities? Are they modernized and included in Harbour elsewhere?

Re: Just upgraded to 3.0.38, but have problem...

Posted: Thu Aug 04, 2011 7:18 am
by gfilatov
rathinagiri wrote:...
where can we find these functionalities?
Hi Rathi,

There is a new class WIN_OLEAUTO instead of old TOleAuto() in the Harbour contrib HBWIN library.

You can uncomment also the function FreeLibrary() in the HMG source file c_winapimisc.c as below

Code: Select all

HB_FUNC( FREELIBRARY )
{
   FreeLibrary( (HMODULE) hb_parnl( 1 ) ) ;
}
Hope that helps :idea:

Re: Just upgraded to 3.0.38, but have problem...

Posted: Thu Aug 04, 2011 7:23 am
by gfilatov
Rathi,

BTW you can look for full source of implementation of class TOleAuto from a new WIN_OLEAUTO below:
#define HB_CLS_NOTOBJECT /* avoid definition of method: INIT */

#include "hbclass.ch"

#include "common.ch"
#include "error.ch"

#define EG_OLEEXCEPTION 1001

STATIC s_bBreak := { | oError | Break( oError ) }

STATIC PROCEDURE Throw( oError )
LOCAL lError := Eval( ErrorBlock(), oError )
IF ! ISLOGICAL( lError ) .OR. lError
__ErrInHandler()
ENDIF
Break( oError )

STATIC FUNCTION ThrowOpError( nSubCode, cOperator, ... )
LOCAL oError

oError := ErrorNew()
oError:Args := { ... }
oError:CanDefault := .F.
oError:CanRetry := .F.
oError:CanSubstitute := .T.
oError:Description := "argument error"
oError:GenCode := EG_ARG
oError:Operation := cOperator
oError:Severity := ES_ERROR
oError:SubCode := nSubCode
oError:SubSystem := "BASE"

RETURN Throw( oError )

CREATE CLASS TOLEAUTO FROM WIN_OLEAUTO
/* TODO: Implement compatibility to the required extent */
VAR cClassName
METHOD New( xOle, cClass )
METHOD hObj( xOle )

METHOD OleValuePlus( xArg ) OPERATOR "+"
METHOD OleValueMinus( xArg ) OPERATOR "-"
METHOD OleValueMultiply( xArg ) OPERATOR "*"
METHOD OleValueDivide( xArg ) OPERATOR "/"
METHOD OleValueModulus( xArg ) OPERATOR "%"
METHOD OleValuePower( xArg ) OPERATOR "^"
METHOD OleValueInc() OPERATOR "++"
METHOD OleValueDec() OPERATOR "--"
METHOD OleValueEqual( xArg ) OPERATOR "="
METHOD OleValueExactEqual( xArg ) OPERATOR "=="
METHOD OleValueNotEqual( xArg ) OPERATOR "!="
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
ENDIF

RETURN ::__hObj

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 )
::cClassName := cClass
ELSE
::cClassName := hb_ntos( win_P2N( xOle ) )
ENDIF
ELSEIF ISCHARACTER( xOle )
hOle := __OleCreateObject( xOle )
IF ! Empty( hOle )
::__hObj := hOle
::cClassName := xOle
ELSE
oError := ErrorNew()
oError:Args := hb_AParams()
oError:CanDefault := .F.
oError:CanRetry := .F.
oError:CanSubstitute := .T.
oError:Description := win_OleErrorText()
oError:GenCode := EG_OLEEXCEPTION
oError:Operation := ProcName()
oError:Severity := ES_ERROR
oError:SubCode := -1
oError:SubSystem := "TOleAuto"

RETURN Throw( oError )
ENDIF
ENDIF

RETURN Self

FUNCTION CreateObject( xOle, cClass )
RETURN TOleAuto():New( xOle, cClass )

FUNCTION GetActiveObject( xOle, cClass )
LOCAL o := TOleAuto():New()
LOCAL hOle
LOCAL oError

IF ISNUMBER( xOle )
xOle := __OLEPDISP( xOle )
ENDIF

IF hb_isPointer( xOle )
o:__hObj := xOle
IF ISCHARACTER( cClass )
o:cClassName := cClass
ELSE
o:cClassName := hb_ntos( win_P2N( xOle ) )
ENDIF
ELSEIF ISCHARACTER( xOle )
hOle := __OleGetActiveObject( xOle )
IF ! Empty( hOle )
o:__hObj := hOle
o:cClassName := xOle
ELSE
oError := ErrorNew()
oError:Args := hb_AParams()
oError:CanDefault := .F.
oError:CanRetry := .F.
oError:CanSubstitute := .T.
oError:Description := win_OleErrorText()
oError:GenCode := EG_OLEEXCEPTION
oError:Operation := ProcName()
oError:Severity := ES_ERROR
oError:SubCode := -1
oError:SubSystem := "TOleAuto"

RETURN Throw( oError )
ENDIF
ENDIF

RETURN o

METHOD OleValuePlus( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ::OleValue + xArg
RECOVER
RETURN ThrowOpError( 1081, "+", Self, xArg )
END SEQUENCE

RETURN xRet

METHOD OleValueMinus( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ::OleValue - xArg
RECOVER
RETURN ThrowOpError( 1082, "-", Self, xArg )
END SEQUENCE

RETURN xRet

METHOD OleValueMultiply( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ::OleValue * xArg
RECOVER
RETURN ThrowOpError( 1083, "*", Self, xArg )
END SEQUENCE

RETURN xRet

METHOD OleValueDivide( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ::OleValue / xArg
RECOVER
RETURN ThrowOpError( 1084, "/", Self, xArg )
END SEQUENCE

RETURN xRet

METHOD OleValueModulus( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ::OleValue % xArg
RECOVER
RETURN ThrowOpError( 1085, "%", Self, xArg )
END SEQUENCE

RETURN xRet

METHOD OleValuePower( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ::OleValue ^ xArg
RECOVER
RETURN ThrowOpError( 1088, "^", Self, xArg )
END SEQUENCE

RETURN xRet

METHOD OleValueInc() CLASS TOLEAUTO

BEGIN SEQUENCE WITH s_bBreak
++::OleValue
RECOVER
RETURN ThrowOpError( 1086, "++", Self )
END SEQUENCE

RETURN Self

METHOD OleValueDec() CLASS TOLEAUTO

BEGIN SEQUENCE WITH s_bBreak
--::OleValue
RECOVER
RETURN ThrowOpError( 1087, "--", Self )
END SEQUENCE

RETURN Self

METHOD OleValueEqual( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ( ::OleValue = xArg ) /* NOTE: Intentionally using '=' operator. */
RECOVER
RETURN ThrowOpError( 1089, "=", Self, xArg )
END SEQUENCE

RETURN xRet

METHOD OleValueExactEqual( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ( ::OleValue == xArg )
RECOVER
RETURN ThrowOpError( 1090, "==", Self, xArg )
END SEQUENCE

RETURN xRet

METHOD OleValueNotEqual( xArg ) CLASS TOLEAUTO
LOCAL xRet

BEGIN SEQUENCE WITH s_bBreak
xRet := ( ::OleValue != xArg )
RECOVER
RETURN ThrowOpError( 1091, "!=", Self, xArg )
END SEQUENCE

RETURN xRet

Re: Just upgraded to 3.0.38, but have problem...

Posted: Thu Aug 04, 2011 7:40 am
by Rathinagiri
Thanks a lot Grigory Filatov. Great!

Re: Just upgraded to 3.0.38, but have problem...

Posted: Thu Aug 04, 2011 4:02 pm
by sudip
Hello Rathi,

I found problem when compiling one of my old projects with 3.0.38
2011-08-04_2126.png
2011-08-04_2126.png (58.19 KiB) Viewed 5091 times
I am not sure, whether I missed something for report library or not.

Thanks.

Re: Just upgraded to 3.0.38, but have problem...

Posted: Thu Aug 04, 2011 4:59 pm
by danielmaximiliano
Hi Sudip:
which library you use in your old application??
You can add a portion of the source where the error is generated

Re: Just upgraded to 3.0.38, but have problem...

Posted: Thu Aug 04, 2011 5:52 pm
by Rathinagiri