xHarbour and latest FWH

Post Reply
Randal
Posts: 269
Joined: Mon Oct 24, 2005 8:04 pm
Been thanked: 1 time

xHarbour and latest FWH

Post by Randal »

I use xHarbour commerical, xBuildW.exe, and xCC compilier and recently upgraded to FWH 2025.01.

When I compile testdlg.prg in the \fwh\samples folder using xBuildW.exe the sample compiles however, when run it closes at ACTIVATE DIALOG with no errors or log file. (msginfo function works).

If I just switch back to FWH 2023.06 it compiles and opens fine.

I get the same results using the version of xHarbour I had or the one included with the latest FWH upgrade (xhb10291_xcc.zip).

What could I be doing wrong?

Thanks,
Randal
User avatar
Antonio Linares
Site Admin
Posts: 42863
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 198 times
Been thanked: 124 times
Contact:

Re: xHarbour and latest FWH

Post by Antonio Linares »

Dear Randal,

In FWH 25.01 we had to remove support for GDI+ for xHarbour commercial as our GDI+ was no longer compatible with vc98 (the Microsoft compiler that we use for xcc compatibility).

If you go to FWH\samples and do buildxhb.bat tutor01 you will find many GDIP... unresolved externals.

If you place this code at the bottom then you can build it:

Code: Select all | Expand

FUNCTION GDIP_DRAWARROW()
   RETURN NIL

FUNCTION GDIP_DELETEIMAGE()
   RETURN NIL

FUNCTION GDIP_DELETEBRUSH()
   RETURN NIL

FUNCTION GDIP_COLORBRUSH()
   RETURN NIL

FUNCTION GDIP_IMAGEBRUSH()
   RETURN NIL

FUNCTION GDIP_DRAWTEXT()
   RETURN NIL

FUNCTION GDIP_HOLLOWTEXT()
   RETURN NIL

FUNCTION GDIP_SAYIMAGE()
   RETURN NIL

FUNCTION GDIP_RINGGRAD()
   RETURN NIL

FUNCTION GDIP_CLONEIMAGE()
   RETURN NIL

FUNCTION GDIP_GETHBITMAP()
   RETURN NIL

FUNCTION GDIP_FROMHBITMAP()
   RETURN NIL

FUNCTION GDIP_FROMRESOURCE()
   RETURN NIL

FUNCTION GDIP_IMAGEFROMFILE()
   RETURN NIL

FUNCTION GDIP_IMAGEFROMSTR()
   RETURN NIL

FUNCTION GDIP_IMAGEINFO()
   RETURN NIL

FUNCTION GDIP_ZOOM()
   RETURN NIL

FUNCTION GDIP_NEWALPHABMP()
   RETURN NIL

FUNCTION GDIP_SAVEIMAGE()
   RETURN NIL

FUNCTION GDIP_IMG2BLOB()
   RETURN NIL

FUNCTION GDIP_CROP()
   RETURN NIL

FUNCTION GDIP_ROTATE()
   RETURN NIL

FUNCTION GDIP_DRAWSHAPES()
   RETURN NIL

FUNCTION GDIP_FILLRECT()
   RETURN NIL

FUNCTION GDIP_GRAD()
   RETURN NIL

FUNCTION GDIP_PIE()
   RETURN NIL

FUNCTION GDIP_RATIO()
   RETURN NIL

FUNCTION GDIP_DRAWIMAGE()
   RETURN NIL

FUNCTION GDIP_FONTSTYLE()
   RETURN NIL

FUNCTION GDIPMESURETXT()
   RETURN NIL

FUNCTION GDIPLUSCAPTURERECTWND()
   RETURN NIL

FUNCTION GDIPLUSIMGTOIMG24()
   RETURN NIL

FUNCTION GDIPLUSIMAGECREATETHUMB()
   RETURN NIL

FUNCTION GDIPLUSIMAGETOCLIPBOARD()
   RETURN NIL

FUNCTION GDIPLUSHBITMAPTOCLIPBOARD()
   RETURN NIL

FUNCTION GDIPLUSHIGHQUALITY()
   RETURN NIL

FUNCTION GDIPLUSNORMALQUALITY()
   RETURN NIL

FUNCTION GDIPLUSDRAWLINE()
   RETURN NIL

FUNCTION GDIPLUSDRAWRECT()
   RETURN NIL

FUNCTION GDIPLUSDRAWELLIPSE()
   RETURN NIL

FUNCTION GDIPLUSDRAWARC()
   RETURN NIL

FUNCTION GDIPLUSDRAWPATH()
   RETURN NIL

FUNCTION GDIPLUSFILLPATH()
   RETURN NIL

FUNCTION GDIPLUSCLEARCOLOR()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXT()
   RETURN NIL

FUNCTION GDIPLUSSETSMOOTHINGGRAPHICS()
   RETURN NIL

FUNCTION GDIPLUSGRAPHTRASLATETRANSFORM()
   RETURN NIL

FUNCTION GDIPLUSGRAPHROTATETRANSFORM()
   RETURN NIL

FUNCTION GDIPLUSGRAPHSCALE()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICS()
   RETURN NIL

FUNCTION SETPAGEUNIT2PIXEL()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICSWND()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICSIMG()
   RETURN NIL

FUNCTION GDIPLUSGRAPHICSFROMIMG()
   RETURN NIL

FUNCTION GDIPLUSDELETEGRAPHICS()
   RETURN NIL

FUNCTION GDIPLUSDRAWIMAGE()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXTFONT()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXTLF()
   RETURN NIL

FUNCTION GDIPLUSISINREGION()
   RETURN NIL

FUNCTION GDIPLUSCREATEREGIONFROMGPATH()
   RETURN NIL

FUNCTION GDIPLUSDELETEPEN()
   RETURN NIL

FUNCTION GDIPLUSPENSETCLR()
   RETURN NIL

FUNCTION GDIPLUSALIGN()
   RETURN NIL

FUNCTION GDIPLUSPENSETLINEJOIN()
   RETURN NIL

FUNCTION GDIPLUSNOALIGN()
   RETURN NIL

FUNCTION GDIPLUSPENSIZE()
   RETURN NIL

FUNCTION GDIPLUSNEWPEN()
   RETURN NIL

FUNCTION GDIPLUSPENSTYLE()
   RETURN NIL

FUNCTION GDIPLUSNEWSOLIDBRUSH()
   RETURN NIL

FUNCTION GDIPLUSDELETEBRUSH()
   RETURN NIL

FUNCTION GDIPLUSNEWGRADIENTBRUSH()
   RETURN NIL

FUNCTION GDIPLUSANGLEGRADIENTBRUSH()
   RETURN NIL

FUNCTION GDIPLUSSTARTUP()
   RETURN NIL

FUNCTION GDIPLUSSHUTDOWN()
   RETURN NIL

FUNCTION GDIPLUSPATHADDARC()
   RETURN NIL

FUNCTION GDIPLUSPATHADDELLIPSE()
   RETURN NIL

FUNCTION GDIPLUSPATHADDLINE()
   RETURN NIL

FUNCTION GDIPLUSPATHADDRECTANGLE()
   RETURN NIL

FUNCTION GDIPLUSPATHCLOSEFIGURE()
   RETURN NIL

FUNCTION GDIPLUSPATHSTARTFIGURE()
   RETURN NIL

FUNCTION GDIPLUSROTATEPATH()
   RETURN NIL

FUNCTION GDIPLUSROTATECENTERPATH()
   RETURN NIL

FUNCTION GDIPLUSSCALEPATH()
   RETURN NIL

FUNCTION GDIPLUSTRANSLATEPATH()
   RETURN NIL

FUNCTION GDIPLUSCREATEPATH()
   RETURN NIL

FUNCTION GDIPLUSPATHADDSTRING()
   RETURN NIL

FUNCTION GDIPLUSDELETEPATH()
   RETURN NIL

FUNCTION GDIPLUSCREATEIMAGEFROMRES()
   RETURN NIL

FUNCTION GDIPLUSIMAGEMATRIXTOGRAY()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETALPHA()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETBLUE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEGETPIXCOLOR()
   RETURN NIL

FUNCTION GDIPLUSPIXISCOLOR()
   RETURN NIL

FUNCTION GDIPLUSCREATEHBITMAPIMAGE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETGREEN()
   RETURN NIL

FUNCTION GDIPLUSGETHEIGHTBITMAP()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETRED()
   RETURN NIL

FUNCTION GDIPLUSGETWIDTHBITMAP()
   RETURN NIL

FUNCTION GDIPLUSIMAGEIS32BITS()
   RETURN NIL

FUNCTION GDIPLUSIMAGEROTATEANGLE()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADPNGFROMSTR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEROTATEFLIP()
   RETURN NIL

FUNCTION GDIPLUSIMAGESET32BITS()
   RETURN NIL

FUNCTION GDIPLUSIMAGESETPIXCOLOR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXTOGRAYCOLOR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEMATRIXCUSTOM()
   RETURN NIL

FUNCTION GDIPLUSIMAGESETPIXHCOLOR()
   RETURN NIL

FUNCTION GDIPLUSPIXELCOLORTOALPHA()
   RETURN NIL

FUNCTION GDIPLUSIMAGESCALE()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADPNGFROMRESOURCES()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADCACHEDFILE()
   RETURN NIL

FUNCTION GDIPLUSIMAGESAVEQUALITY()
   RETURN NIL

FUNCTION GDIPLUSIMAGESAVE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEDISPOSE()
   RETURN NIL

FUNCTION GDIPLUSIMAGERESIZE()
   RETURN NIL

FUNCTION GDIPLUSEMFTOJPG()
   RETURN NIL

FUNCTION GDIPLUSIMAGECROP()
   RETURN NIL

FUNCTION GDIPLUSEMFTOBMP()
   RETURN NIL

FUNCTION GDIPLUSLOADDIRECTIMAGE()
   RETURN NIL

FUNCTION GDIPLUSIMGGETFRAMECOUNT()
   RETURN NIL

FUNCTION GDIPLUSIMGGETFRAME()
   RETURN NIL

FUNCTION GDIPLUSBMPEMPTY()
   RETURN NIL   
Anyhow it seems as effectively there is a bug when showing a dialog. We are working to fix it.

Many thanks for your feedback and we apologize for the inconveniencies
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 42863
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 198 times
Been thanked: 124 times
Contact:

Re: xHarbour and latest FWH

Post by Antonio Linares »

Additionally this may be required too for xHB commercial:

Code: Select all | Expand

#pragma BEGINDUMP

#include <Windows.h>

#undef SetWindowLongPtr

long int SetWindowLongPtr( HWND hWnd, int nIndex, long int dwNewLong )
{
   return SetWindowLong( hWnd, nIndex, ( LONG_PTR ) dwNewLong );
}

#pragma ENDDUMP   
regards, saludos

Antonio Linares
www.fivetechsoft.com
Randal
Posts: 269
Joined: Mon Oct 24, 2005 8:04 pm
Been thanked: 1 time

Re: xHarbour and latest FWH

Post by Randal »

Antonio,

Thank you for your reply.

I am not getting any unresolved externals as I I had added these functions from another post I saw here on the forum.

I also added dummy functions for
xLINK: error: Unresolved external symbol '_HB_FUN_HB_GETFILESINZIP referenced from FiveHMX.lib(olefuncs.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_HB_UNZIPFILE referenced from FiveHMX.lib(olefuncs.obj)'.

I also included the latest xfw.lib I saw posted here recently on the forum.

This is a copy of xbuilder log.
Type: C >>>xhb.exe -o"testdlg.c" -m -n -p -q -gc0 -I"D:\FWH\include" -I"D:\xHarbour\include" -I"D:\xHarbour\include\w32" "D:\fwh\samples\testdlg.prg"<<<

xHarbour 1.3.2 Intl. (SimpLex) (Build 20250311)
Copyright 1999-2025, http://www.xharbour.org http://www.harbour-project.org/
Generating object output to 'testdlg.obj'...

Type: C >>>xhb.exe -o"dummy2.c" -m -n -p -q -gc0 -I"D:\FWH\include" -I"D:\xHarbour\include" -I"D:\xHarbour\include\w32" "dummy2.prg"<<<

xHarbour 1.3.2 Intl. (SimpLex) (Build 20250311)
Copyright 1999-2025, http://www.xharbour.org http://www.harbour-project.org/
Generating object output to 'dummy2.obj'...

Type: C >>>xlink.exe -NOEXPOBJ -MAP -FORCE:MULTIPLE -NOIMPLIB -subsystem:windows -UNMANGLE -LIBPATH:"D:\FWH\lib" -LIBPATH:"D:\xHarbour\lib" -LIBPATH:"D:\xHarbour\c_lib" -LIBPATH:"D:\xHarbour\c_lib\win" "testdlg.obj" "dummy2.obj" "D:\fwh\lib\xfw.lib" "FiveHCM.lib" "FiveHMX.lib" "OptG.lib" "xhb.lib" "dbf.lib" "nsx.lib" "ntx.lib" "cdx.lib" "rmdbfcdx.lib" "ct3comm.lib" crt.lib kernel32.lib user32.lib winspool.lib ole32.lib oleaut32.lib odbc32.lib odbccp32.lib uuid.lib wsock32.lib ws2_32.lib wininet.lib advapi32.lib shlwapi.lib msimg32.lib mpr.lib OleDlg.lib version.lib comctl32.lib comdlg32.lib gdi32.lib shell32.lib winmm.lib lz32.lib Netapi32.lib -out:"testdlg.exe"<<<

This is a copy of my xbuider .xbp file.
CINI =
C_OUTPUTFOLDER =
DEFFILE =
INCLUDEFOLDERS =
LAUTORUN =
LDEBUG = .F.
LGUI = .T.
LIBFOLDERS =
LMT = .F.
LNOAUTOFWH = .F.
LPRG_CLASSICDEBUG = .F.
LPRG_DEBUG = .F.
LUSEDLL = .F.
MAPFILE =
MYC_FLAGS =
MYDEFINES =
MYLINK_FLAGS =
MYPRG_FLAGS =
MYRC_FLAGS =
MYSLY_FLAGS =
OUTPUTFOLDER =
PRG_OUTPUTFOLDER =
RC_OUTPUTFOLDER =
RUNARGUMENTS =
SLY_OUTPUTFOLDER =
STARTIN =
TARGETFOLDER =

[D:\fwh\samples\testdlg.prg]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[dummy2.prg]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[D:\fwh\lib\xfw.lib]

This is the xbuild.windows.ini file:

[xHB]
Root = D:\xHarbour\
LibFolder = D:\xHarbour\lib\
Flags = -m -n -p -q -gc0
Exe = xhb.exe

[xCC]
Root = D:\xHarbour\
Compile Flags = -Ot
Link Flags = -NOEXPOBJ -MAP -FORCE:MULTIPLE

[FWH]
Root = D:\FWH\
LibFolder = D:\FWH\lib

[GUI]
Root =
LibFolder =

Can you or anyone confirm that building the testdlg.prg sample using xHarbour/xbuildw.exe with the latest FWH works ok? Maybe I have some kind of link, flag, or environment problem?

Thanks,
Randal
User avatar
Antonio Linares
Site Admin
Posts: 42863
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 198 times
Been thanked: 124 times
Contact:

Re: xHarbour and latest FWH

Post by Antonio Linares »

Dear Randal,

It is our bug. It was introduced from FWH 24.09 to FWH 24.10.

With FWH 24.09 it works fine. We are reviewing the changes from 24.09 to 24.10

This bug only shows with xHarbour commercial. With free xHarbour it works fine.

I am going to email you FWH 24.09 so you can confirm that it works fine for you too.

Many thanks for your help
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 42863
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 198 times
Been thanked: 124 times
Contact:

Re: xHarbour and latest FWH

Post by Antonio Linares »

When the app quits with no messages or logs usually it is due a GPF, so we redirect the GPF:

Code: Select all | Expand

function GPF() 

   hb_memoWrit( "gpf.log", cCallStack( CRLF, 1 ) )

return nil

Code: Select all | Expand

#pragma BEGINDUMP

#include <Windows.h>
#include <hbapi.h>
#include <hbvm.h>

#undef SetWindowLongPtr

LONG WINAPI GPFHandler( PEXCEPTION_POINTERS exceptionInfo ) 
{
   hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFindName( "GPF" ) ) );
   hb_vmPushNil();
   hb_vmDo( 0 );

   return EXCEPTION_EXECUTE_HANDLER; // Maneja la excepción y termina
}

unsigned int SetWindowLongPtr( HWND hWnd, int nIndex, long int dwNewLong )
{
   SetUnhandledExceptionFilter( GPFHandler );

   return SetWindowLong( hWnd, nIndex, ( LONG_PTR ) dwNewLong );
}

#pragma ENDDUMP   
regards, saludos

Antonio Linares
www.fivetechsoft.com
Randal
Posts: 269
Joined: Mon Oct 24, 2005 8:04 pm
Been thanked: 1 time

Re: xHarbour and latest FWH

Post by Randal »

Antonio,

Everything works ok with FWH 2024.09.

I added the above functions to testdlg.prg and tried again with 2025.01. The program closed with no message and no gpf.log file was created.

Thanks,
Randal Ferguson
User avatar
Antonio Linares
Site Admin
Posts: 42863
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 198 times
Been thanked: 124 times
Contact:

Re: xHarbour and latest FWH

Post by Antonio Linares »

Dear Randal,

Bug located and fixed :)

I have emailed you a new FWH 25.04 build to test it

Many thanks for your feedback!
regards, saludos

Antonio Linares
www.fivetechsoft.com
Randal
Posts: 269
Joined: Mon Oct 24, 2005 8:04 pm
Been thanked: 1 time

Re: xHarbour and latest FWH

Post by Randal »

Antonio,

Thank you for all your help and yes, the update works.

I did notice a difference in behavior when opening a mdi window.

In the Main function of the testmdi4.prg sample, I added the ON INIT clause to demonstrate what I'm talking about.

function Main()

local oBar

SET _3DLOOK ON

DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI

DEFINE BUTTONBAR oBar _3D OF oWnd

DEFINE BUTTON OF oBar ACTION child() //( Child(), MsgInfo( oWnd:oWndClient:aWnd[ 1 ]:cCaption ) )

ACTIVATE WINDOW oWnd maximized ;
ON INIT ( MSGINFO("On Init") ) // Added

return nil

When compiled with 202306, the mid window and buttonbar are displayed, then the msginfo dialog. When compiled with 2025.04 the msginfo dialog is displayed first and when you click Ok the mdi window and buttonbar are displayed.

My app opens with a mdi window and button bar and then I use the ON INIT clause to open a login dialog. Normally, the mdi window and button bar are displayed and then the login dialog on top of that. Now, the login dialog is displayed by itself as per the above example.

How can I achieve the previous behavior?

Thanks,
Randal Ferguson
User avatar
Antonio Linares
Site Admin
Posts: 42863
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 198 times
Been thanked: 124 times
Contact:

Re: xHarbour and latest FWH

Post by Antonio Linares »

Dear Randal,

You can do it this way:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

local oBar

SET _3DLOOK ON

DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI
oWnd:Maximize()
oWnd:Show()

DEFINE BUTTONBAR oBar _3D OF oWnd

DEFINE BUTTON OF oBar // ACTION child() //( Child(), MsgInfo( oWnd:oWndClient:aWnd[ 1 ]:cCaption ) )

ACTIVATE WINDOW oWnd maximized ;
   ON INIT ( MSGINFO("On Init") ) // Added

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
karinha
Posts: 8079
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 12 times
Contact:

Re: xHarbour and latest FWH

Post by karinha »

Code: Select all | Expand

// C:\FWH\SAMPLES\MDISHOW.PRG

#include "FiveWin.ch"

STATIC oWnd, oWndChild

FUNCTION Main()

   LOCAL oBar, oChild, oSalida

   SET _3DLOOK ON

   DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI

   DEFINE BUTTONBAR oBar BUTTONSIZE 50, 50 _3DLOOK TOP OF oWnd 2015

   DEFINE BUTTON oChild OF OBAR PROMPT "Child()"                             ;
      MESSAGE "Child"                                                        ;
      ACTION( Child() )                                                      ;
      TOOLTIP "Child()"                                                      ;
      NOBORDER GROUP

   DEFINE BUTTON oSalida OF OBAR PROMPT "Exit"                               ;
      MESSAGE "Salida"                                                       ;
      ACTION( oWnd:End() )                                                   ;
      TOOLTIP "Salida"                                                       ;
      NOBORDER GROUP

   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON INIT( oWnd:oMenu:End(), MsgInfo( "On Init" ) )

RETURN NIL

STATIC FUNCTION Child()

   LOCAL cTitle

   cTitle := ( oWnd:cCaption )

   DEFINE WINDOW oWndChild MDICHILD FROM 0, 0 TO 32, 100 OF oWnd TITLE cTitle

   ACTIVATE WINDOW oWndChild

RETURN NIL

// FIN / END
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Randal
Posts: 269
Joined: Mon Oct 24, 2005 8:04 pm
Been thanked: 1 time

Re: xHarbour and latest FWH

Post by Randal »

Thank you, I'll give these a try.

Best Regards,
Randal
Post Reply