Some changes to get it working on Harbour

This commit is contained in:
Antonio Linares
2007-04-16 23:31:08 +00:00
parent 9845fde15c
commit 7d37eab4ca
2 changed files with 64 additions and 11 deletions

View File

@@ -108,6 +108,8 @@ static DISPPARAMS s_EmptyDispParams;
static VARIANTARG RetVal, OleVal;
static BOOL bInit = FALSE;
// -----------------------------------------------------------------------
#define EG_OLEEXECPTION 1001
@@ -151,11 +153,37 @@ PHB_ITEM HB_EXPORT hb_itemPutCRawStatic( PHB_ITEM pItem, const char * szText, UL
return pItem;
}
static void TraceLog( char * cFile, ... )
static void TraceLog( const char * sFile, const char * sTraceMsg, ... )
{
HB_SYMBOL_UNUSED( cFile );
FILE *hFile;
if( !sTraceMsg )
{
return;
}
if( sFile == NULL )
{
hFile = fopen( "trace.log", "a" );
}
else
{
hFile = fopen( sFile, "a" );
}
if( hFile )
{
va_list ap;
va_start( ap, sTraceMsg );
vfprintf( hFile, sTraceMsg, ap );
va_end( ap );
fclose( hFile );
}
}
// -----------------------------------------------------------------------
static EXCEPINFO excep;
@@ -211,6 +239,7 @@ static void TraceLog( char * cFile, ... )
}
//---------------------------------------------------------------------------//
HB_FUNC( __HB_OLE_INIT )
{
if( s_pSym_TOleAuto == NULL )
@@ -230,12 +259,26 @@ static void TraceLog( char * cFile, ... )
s_EmptyDispParams.rgdispidNamedArgs = 0;
s_EmptyDispParams.cNamedArgs = 0;
if( ! bInit )
{
OleInitialize( NULL );
bInit = TRUE;
}
VariantInit( &RetVal );
VariantInit( &OleVal );
}
}
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
HB_FUNC( __HB_OLE_EXIT )
{
OleUninitialize();
}
//---------------------------------------------------------------------------//
HB_FUNC( ANSITOWIDE ) // ( cAnsiStr ) -> cWideStr
{
char *cString = hb_parc( 1 );
@@ -1486,7 +1529,7 @@ static void TraceLog( char * cFile, ... )
SysFreeString( bstrClassID );
//TraceLog( NULL, "Result: %p\n", s_nOleError );
// TraceLog( NULL, "Result: %p\n", s_nOleError );
if( hb_pcount() == 2 )
{
@@ -1506,11 +1549,11 @@ static void TraceLog( char * cFile, ... )
if( SUCCEEDED( s_nOleError ) )
{
//TraceLog( NULL, "Class: %i\n", ClassID );
// TraceLog( NULL, "Class: %i\n", ClassID );
s_nOleError = CoCreateInstance( (REFCLSID) &ClassID, NULL, CLSCTX_SERVER, (REFIID) riid, &pDisp );
//TraceLog( NULL, "Result: %p\n", s_nOleError );
// TraceLog( NULL, "Result: %p\n", s_nOleError );
}
hb_retnl( ( LONG ) pDisp );
}

View File

@@ -72,6 +72,7 @@
#define HB_CLS_NOTOBJECT
#include "hbclass.ch"
#include "error.ch"
@@ -82,20 +83,29 @@ FUNCTION CreateObject( cString )
RETURN TOleAuto():New( cString )
//----------------------------------------------------------------------------//
FUNCTION GetActiveObject( cString )
RETURN TOleAuto():GetActiveObject( cString )
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
// Called by hb_vmInit() by means of hb_vmDoInitOle() ONLY if OLE is linked-in
PROCEDURE HB_OleInit()
init PROCEDURE HB_OleInit()
__HB_OLE_INIT()
RETURN
//----------------------------------------------------------------------------//
exit procedure HB_OleExit()
__HB_OLE_EXIT()
return
//----------------------------------------------------------------------------//
CLASS VTWrapper
DATA vt
DATA Value
@@ -205,7 +215,7 @@ METHOD New( uObj, cClass ) CLASS TOleAuto
IF ::hObj != NIL
RETURN HB_ExecFromArray( Self, "_New", HB_aParams() )
ENDIF
IF ValType( uObj ) = 'C'
::hObj := CreateOleObject( uObj )