Page 2 of 2

Re: ActiveX Equivalentes de funciones FoxPro en Fivewin

Posted: Tue Nov 26, 2024 11:17 pm
by Antonio Linares
Otro intento que aún sigue fallando:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oShell := CreateObject( "Shell.Application" )
    local oInterface := GetInterface( oShell, "{000214D0-0000-0000-C000-000000000046}" ) // "IShellDispatch"

    ? oInterface:ClassName

return nil    

#pragma BEGINDUMP 

#include <windows.h>
#include <hbapi.h>
#include <hbstack.h>

IDispatch * hb_oleItemGet( PHB_ITEM pItem );
PHB_ITEM hb_oleItemPut( PHB_ITEM pItem, IDispatch * pDisp );

static wchar_t * AnsiToWide( const char * szString )
{
   int       iLen;
   wchar_t * szWide;

   iLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szString, -1, NULL, 0 );
   szWide = ( wchar_t* ) hb_xgrab( iLen * sizeof( wchar_t ) );
   MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szString, -1, szWide, iLen );
   return szWide;
}

HB_FUNC( GETINTERFACE )
{
   IDispatch * pDisp = hb_oleItemGet( hb_param( 1, HB_IT_ANY ) );
   IID riid;
   IDispatch * pInterface = NULL;
   wchar_t * cIID = AnsiToWide( hb_parc( 2 ) );

   if( IIDFromString( ( LPOLESTR ) cIID, &riid ) == S_OK )
   {
      MessageBox( 0, "ok", "ok", 0 ); 
      if( pDisp->lpVtbl->QueryInterface( pDisp, &riid, ( void** ) &pInterface ) == S_OK )
      {
         hb_oleItemPut( hb_stackReturnItem(), pInterface );
      }
   }

   hb_xfree( cIID );
}

#pragma ENDDUMP

Re: ActiveX Equivalentes de funciones FoxPro en Fivewin

Posted: Tue Nov 26, 2024 11:20 pm
by Antonio Linares
Tercer intento, sigue sin funcionar:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oShell := CreateObject( "Shell.Application" )
    local oInterface := GetInterface( oShell:__hObj, "{000214D0-0000-0000-C000-000000000046}" ) // "IShellDispatch"

    ? oInterface:ClassName

return nil    

#pragma BEGINDUMP 

#include <windows.h>
#include <hbapi.h>
#include <hbstack.h>

IDispatch * hb_oleItemGet( PHB_ITEM pItem );
PHB_ITEM hb_oleItemPut( PHB_ITEM pItem, IDispatch * pDisp );

static wchar_t * AnsiToWide( const char * szString )
{
   int       iLen;
   wchar_t * szWide;

   iLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szString, -1, NULL, 0 );
   szWide = ( wchar_t* ) hb_xgrab( iLen * sizeof( wchar_t ) );
   MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szString, -1, szWide, iLen );
   return szWide;
}

HB_FUNC( GETINTERFACE )
{
   IDispatch * pDisp = hb_oleItemGet( hb_param( 1, HB_IT_ANY ) );
   IID riid;
   IDispatch * pInterface = NULL;
   wchar_t * cIID = AnsiToWide( hb_parc( 2 ) );

   if( IIDFromString( ( LPOLESTR ) cIID, &riid ) == S_OK )
   {
      MessageBox( 0, "1", "1", 0 ); 
      if( pDisp->lpVtbl->QueryInterface( pDisp, &riid, ( void** ) &pInterface ) == S_OK )
      {
        MessageBox( 0, "2", "2", 0 ); 
        hb_oleItemPut( hb_stackReturnItem(), pInterface );
      }
   }

   hb_xfree( cIID );
}

#pragma ENDDUMP

Re: ActiveX Equivalentes de funciones FoxPro en Fivewin

Posted: Wed Nov 27, 2024 12:36 am
by sysctrl2
Gracias Antonio,
te necesitamos para poder dar el salto !!!

Re: ActiveX Equivalentes de funciones FoxPro en Fivewin

Posted: Wed Nov 27, 2024 2:18 am
by albeiroval
sysctrl2 wrote:Gracias Antonio,
te necesitamos para poder dar el salto !!!
Por supuesto Cesar, estamos a la expectativa