Page 1 of 1

Defined( ) : new constant #PB_ASM_Symbol

Posted: Wed Nov 19, 2008 1:07 am
by eddy
Here is a little example of my problem :

Code: Select all

;//// From included file 1

!EXTRN _PB_Gadget_RegisterGadget@16

;//// From included file 2

!EXTRN _PB_Gadget_RegisterGadget@16 
;--->  error message : symbol already defined 
Is it possible to add a new constant for this case ?
#PB_ASM_Symbol

Code: Select all

CompilerIf Defined(_PB_Gadget_RegisterGadget, #PB_ASM_Symbol)=#False
!EXTRN _PB_Gadget_RegisterGadget@16 
CompilerEndIf

Posted: Wed Nov 19, 2008 2:02 am
by ts-soft
Why not import "PB_Gadget_RegisterGadget" ?

Posted: Wed Nov 19, 2008 2:10 am
by eddy
Why not import "PB_Gadget_RegisterGadget"
It works only for external functions (like _PB_Gadget_RegisterGadget).

But how to import _PB_Gadget_Objects ?
It seems to be a global variable.

Do you know the ASM code to check if symbol exists ?

Posted: Wed Nov 19, 2008 2:19 am
by freak
The compiler cannot know what will be going on at the assembly stage.
You have to use FASM conditional directives for this.

Posted: Wed Nov 19, 2008 2:28 am
by ts-soft

Code: Select all

Import "Gadget.lib"
  CompilerIf #PB_Compiler_Unicode
  PB_Gadget_RegisterGadget(a,b,c,d) As "_PB_Gadget_RegisterGadget_UNICODE@16"
  CompilerElse
  PB_Gadget_RegisterGadget(a,b,c,d) As "_PB_Gadget_RegisterGadget@16"
  CompilerEndIf
EndImport

Import "Gadget.lib"
  PB_Gadget_Objects
EndImport

Debug PB_Gadget_Objects

If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(0, 8, 8, 306, 133) 
  TextGadget(1,0,0,0,0,"")
  For a = 0 To 5 
    AddGadgetItem(0, a, "Line "+Str(a)) 
  Next 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf 

Posted: Wed Nov 19, 2008 2:53 am
by eddy
great! It works thx. :)

And if someone needs to know the FASM directives :

Code: Select all

!IF ~ DEFINED _PB_Gadget_RegisterGadget
   !EXTRN _PB_Gadget_RegisterGadget@16
!END IF