el caso es que toda mi busqueda queda en la funcion FindResource, la cual tu me indicas que es usada la WINAPI
GetResource da valor diferente a cero, pero FindResource da cero, por eso fallan, que se podria hacer?
con xharbour.org retornan valores diferenets a cero tanto GetResources y FindResource.
- Code: Select all Expand view
#pragma BEGINDUMP
#ifndef __BORLANDC__
#define WINVER 5
#endif
#include "hbapi.h"
#include "windows.h"
#define IF(x,y,z) ((x)?(y):(z))
HINSTANCE GetResources( void );
void PalBmpNew( HWND hWnd, HBITMAP hBitmap, HPALETTE hPalette );
HBITMAP hPalBitmapNew( HDC hDC, LPBITMAPINFO pbmi );
static HPALETTE hPalette = 0;
HB_FUNC( PALBMPLOAD ) // ( cResourceName )
{
#ifndef UNICODE
HRSRC hRes = FindResource( ( HMODULE ) GetResources(),
IF( ISCHAR( 1 ), hb_parc( 1 ), MAKEINTRESOURCE( hb_parni( 1 ) ) ),
RT_BITMAP );
#else
LPWSTR pW = AnsiToWide( ( char * ) hb_parc( 1 ) );
HRSRC hRes = FindResource( ( HMODULE ) GetResources(),
IF( HB_ISCHAR( 1 ), pW, MAKEINTRESOURCE( hb_parni( 1 ) ) ),
RT_BITMAP );
#endif
HANDLE hResource = IF( hRes, LoadResource( GetResources(), hRes ), 0 );
#ifdef UNICODE
hb_xfree( pW );
#endif
char szDMCBug[20];
sprintf( szDMCBug, "FindResource-->: %i\n", (LONG) FindResource( ( HMODULE ) GetResources(), hb_parc(1), RT_BITMAP ) );
//sprintf( szDMCBug, "GetResource-->: %i\n", (LONG) ( HMODULE ) GetResources() );
hb_OutDebug( szDMCBug );
if( hRes )
{
OutputDebugStringA("hRes OK\n");
if( hResource)
{
OutputDebugStringA( "hResource OK\n" );
}
else
{
OutputDebugStringA( "hResource FAIL\n" );
}
}
else
{
OutputDebugStringA("hRes FAIL\n");
}
if( hRes )
{
#ifndef __FLAT__
hb_reta( 2 );
hb_stornl( ( LONG ) hPalBitmapNew( 0, (LPBITMAPINFO) GlobalLock( hResource ) ), -1, 1 );
hb_stornl( ( LONG ) hPalette, -1, 2 );
GlobalUnlock( hResource );
#else
hb_reta( 2 );
hb_storvnl( ( LONG ) hPalBitmapNew( 0, ( struct tagBITMAPINFO * ) hResource ), -1, 1 );
hb_storvnl( ( LONG ) hPalette, -1, 2 );
#endif
#ifndef UNICODE
FreeResource( hResource );
#endif
}
else
{
hb_reta( 2 );
hb_storvnl( 0, -1, 1 );
hb_storvnl( 0, -1, 2 );
}
}
HB_FUNC( FINDRESOURCE ) // ( hResources, cResourceName, nResType )
{
hb_OutDebug( "FindResource\n" );
#ifndef UNICODE
#ifndef _WIN64
hb_retnl( ( LONG ) FindResource( ( HINSTANCE ) hb_parnl( 1 ),
hb_parc( 2 ), MAKEINTRESOURCE( hb_parni( 3 ) ) ) );
#else
hb_retnl( ( LONG ) FindResource( ( HINSTANCE ) hb_parnll( 1 ),
hb_parc( 2 ), MAKEINTRESOURCE( hb_parni( 3 ) ) ) );
#endif
#else
LPWSTR pW = AnsiToWide( ( char * ) hb_parc( 2 ) );
hb_retnl( ( LONG ) FindResource( ( HINSTANCE ) hb_parnl( 1 ),
pW, MAKEINTRESOURCE( hb_parni( 3 ) ) ) );
_xfree( pW );
#endif
}
#pragma ENDDUMP