Page 1 of 2

...is not a function, array, macro or linked list

Posted: Tue May 19, 2009 8:36 pm
by J. Baker
New to TailByte. But I'm getting this error and I'm not sure why?

I basically created my the code like I would for a dll. And TailByte creates the lib just fine but when I go to test it I get the error.

Posted: Wed May 20, 2009 2:35 am
by Mistrel
You'll have to provide some code for us to look at.

Posted: Wed May 20, 2009 2:46 am
by J. Baker

Code: Select all

ProcedureDLL AnimateSprite(Sprite, ClipWidth, ClipHeight, FramesPerRow, NumberOfFrames, StartFrame, EndFrame, FpsDelay)

Structure SpriteCalculations
LoopFrames.l
Loop.l
XStart.l
YStart.l
EndStructure

Static Dim Sprites.SpriteCalculations(99)

FramesPerColumn = Round((NumberOfFrames / FramesPerRow), #PB_Round_Up)

Sprites(Sprite)\LoopFrames + 1
If Sprites(Sprite)\LoopFrames > EndFrame
 Sprites(Sprite)\LoopFrames = StartFrame
EndIf

If Sprites(Sprite)\LoopFrames = StartFrame

  DivXStart = Round(StartFrame / FramesPerRow, #PB_Round_Down)
  MulXStart = DivXStart *  FramesPerRow
  MinXStart = StartFrame - MulXStart
     Sprites(Sprite)\XStart = (MinXStart * ClipWidth) - ClipWidth
  If Sprites(Sprite)\XStart < 0
     Sprites(Sprite)\XStart = 0
  EndIf
     Sprites(Sprite)\YStart = (Round(StartFrame / FramesPerColumn, #PB_Round_Up) * ClipHeight) - ClipHeight
EndIf

  DivXEnd = Round(StartFrame / FramesPerRow, #PB_Round_Down)
  MulXEnd = DivXEnd *  FramesPerRow
  MinXEnd = StartFrame - MulXEnd
     XEnd = (MinXend * ClipWidth) - ClipWidth
  
     YEnd = (Round(StartFrame / FramesPerColumn, #PB_Round_Up) * ClipHeight) - ClipHeight
   
ClipSprite(Sprite, Sprites(Sprite)\XStart, Sprites(Sprite)\YStart, ClipWidth, ClipHeight)

If Sprites(Sprite)\Loop > FpsDelay
  
   Sprites(Sprite)\XStart + ClipWidth
    If Sprites(Sprite)\XStart = ClipWidth * FramesPerRow
        Sprites(Sprite)\YStart + ClipHeight
        DivXStart = Round(StartFrame / FramesPerRow, #PB_Round_Down)
        MulXStart = DivXStart *  FramesPerRow
        MinXStart = StartFrame - MulXStart
           Sprites(Sprite)\XStart = (MinXStart * ClipWidth) - ClipWidth
        If Sprites(Sprite)\XStart < 0
           Sprites(Sprite)\XStart = 0
        EndIf
    EndIf
    
     Sprites(Sprite)\Loop = 1

    If Sprites(Sprite)\XStart = XEnd And Sprites(Sprite)\YStart = YEnd
        Sprites(Sprite)\LoopFrames = StartFrame - 1
    EndIf
    
   Else
    Sprites(Sprite)\LoopFrames - 1
    Sprites(Sprite)\Loop + 1
    
EndIf
   
EndProcedure

Posted: Wed May 20, 2009 7:28 am
by lexvictory
You did restart the compiler after creating the lib didn't you?
That message usually means you didn't. (or TB is not configured properly)

Posted: Wed May 20, 2009 1:50 pm
by J. Baker
lexvictory wrote:You did restart the compiler after creating the lib didn't you?
That message usually means you didn't. (or TB is not configured properly)
Yeah I tried restarting the compiler and even closing PB and restarting it.

Posted: Wed May 20, 2009 1:52 pm
by gnozal
...is not a function, array, macro or linked list
I can think of 3 possibilities :
1. Your forgot to use ProcedureDLL instead of Procedure
-> Not the case, your code is ok
2. You didn't restart the compiler
-> Not the case, you did.
3. Your library doesn't exist in %YourPBDirectory%\PureLibraries\UserLibraries
-> Not the case.
Then I don't know !

Posted: Wed May 20, 2009 1:54 pm
by J. Baker
gnozal wrote:Maybe a path issue ?
Does your library exist in %YourPBDirectory%\PureLibraries\UserLibraries ?
Yes

Posted: Wed May 20, 2009 1:57 pm
by lexvictory
can you run tailbite on the file using /LOGF as a parameter (edit the tool), and post the log (see the help for its location)

Posted: Wed May 20, 2009 2:25 pm
by J. Baker
lexvictory wrote:can you run tailbite on the file using /LOGF as a parameter (edit the tool), and post the log (see the help for its location)
  • Parameter() :C:\Documents and Settings\J. Baker\My Documents\PureBasic\AnimateSprite.pb
    Parameter() :/LOGF
    GetPBFolder()
    Detected OS : Windows XP/Server 2003
    HKCU\Software\Classes\PureBasic.exe\shell\open\command="C:\Program Files\PureBasic\PureBasic.exe" "%1" /P "C:\Documents and Settings\J. Baker\Application Data\PureBasic\PureBasic.prefs" /T "C:\Documents and Settings\J. Baker\Application Data\PureBasic\Templates.prefs" /A "C:\Documents and Settings\J. Baker\Application Data\PureBasic\Tools.prefs"
    OSVersion()=60
    C:\Program Files\PureBasic\tailbite\TailBite.exe
    PureBasic Version found : 4.30 C 2008 FANTAISIE SOFTWARE / 430 /X86
    Mode=0
    GetPBFolder()=C:\Program Files\PureBasic\
    TBPreferencesPath$=C:\Documents and Settings\J. Baker\Application Data\TailBite\
    TBPrefsFile$=C:\Documents and Settings\J. Baker\Application Data\TailBite\TailBite_430.prefs
    PBCompilerFolder$=C:\Program Files\PureBasic\compilers\
    PrefsFound=1
    PBFolder$=C:\Program Files\PureBasic\
    TBFolder$=C:\Program Files\PureBasic\tailbite\
    LibSourceFolder$=C:\Documents and Settings\J. Baker\My Documents\TailBite Library Sources\
    LastFile$=
    ManagerOnTop=0
    PBSubsystem$=purelibraries\userlibraries\
    Language$=English
    PBPreferencesPath$=C:\Documents and Settings\J. Baker\Application Data\Purebasic\
    TBTempPath$=C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\
    pb_align$=pb_align
    pb_bssalign$=pb_bssalign
    LibraryMakerOptions$= /COMPRESSED /NOUNICODEWARNING
    IsPB410=1
    LibraryMaker$=C:\Program Files\PureBasic\\SDK\LibraryMaker.exe
    TailBite Version found : 1.4.0
    Libexe$=C:\Program Files\PureBasic\compilers\polib.exe
    LibexeBaseName$=polib
    Inc_Taibite > MainProc()
    LibName$=AnimateSprite
    HelpName$(read from old userlib)=AnimateSprite.chm
    CopyFile ok :C:\Program Files\PureBasic\purelibraries\userlibraries\animatesprite -> C:\Documents and Settings\J. Baker\Local Settings\Temp\TB_AnimateSprite_728B5142
    recover=1
    Opening PB 4.30 C 2008 FANTAISIE SOFTWARE asm source...
    PBCompile(C:\Documents and Settings\J. Baker\My Documents\PureBasic\AnimateSprite.pb,, /COMMENTED /DEBUGGER /EXE "C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\PureBasic.exe")
    ExecuteProgram("C:\Program Files\PureBasic\compilers\pbcompiler.exe","C:\Documents and Settings\J. Baker\My Documents\PureBasic\AnimateSprite.pb" /COMMENTED /DEBUGGER /EXE "C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\PureBasic.exe",)
    RunProgram(C:\Program Files\PureBasic\compilers\pbcompiler.exe,"C:\Documents and Settings\J. Baker\My Documents\PureBasic\AnimateSprite.pb" /COMMENTED /DEBUGGER /EXE "C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\PureBasic.exe",)
    Creating function list...
    Inc_Taibite > CreateFunctionList()
    - Function index 0
    function()\ID=0
    function()\RetValue$=None
    function()\Name$=AnimateSprite
    function()\PlainName$=AnimateSprite
    function()\Args$=, Long, Long, Long, Long, Long, Long, Long, Long
    function()\nArgs=8
    function()\Main=1
    function()\maxArgs=8
    function()\HelpLine$=(Sprite, ClipWidth, ClipHeight, FramesPerRow, NumberOfFrames, StartFrame, EndFrame, FpsDelay)
    function()\DLLFunction=1
    function()\FIndex=0
    function()\Modifiers$=
    function()\DebugFunction=0
    function()\nModifiers=0
    function()\VarArgs$=
    function()\VarArgStr$=
    function()\VarHelpStr$=
    - Function index 1
    function()\ID=1
    function()\RetValue$=InitFunction
    function()\Name$=AnimateSprite_Init
    function()\PlainName$=AnimateSprite_Init
    function()\Args$=
    function()\nArgs=0
    function()\Main=1
    function()\maxArgs=0
    function()\HelpLine$=
    function()\DLLFunction=1
    function()\FIndex=-1
    function()\Modifiers$=
    function()\DebugFunction=0
    function()\nModifiers=0
    function()\VarArgs$=
    function()\VarArgStr$=
    function()\VarHelpStr$=
    HelpName$=AnimateSprite.chm
    Splitting functions...
    Inc_Taibite > SplitFunctions()
    System function found : KERNEL32
    ===============C:\Documents and Settings\J. Baker\My Documents\TailBite Library Sources\AnimateSprite\AnimateSprite.Desc===============
    =======================================================================================================================================
    Compiling asm code...
    RunProgram(C:\Program Files\PureBasic\compilers\fasm.exe,Functions\AnimateSprite.asm Functions\AnimateSprite.obj,C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\)
    RunProgram(C:\Program Files\PureBasic\compilers\fasm.exe,Functions\AnimateSprite_Init.asm Functions\AnimateSprite_Init.obj,C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\)
    RunProgram(C:\Program Files\PureBasic\compilers\fasm.exe,Functions\AnimateSpriteShared.asm Functions\AnimateSpriteShared.obj,C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\)
    RunProgram(C:\Program Files\PureBasic\compilers\fasm.exe,Functions\Shared\AnimateSprite_End.asm Functions\Shared\AnimateSprite_End.obj,C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\)
    Compiling lib file...
    RunProgram("C:\Program Files\PureBasic\compilers\polib.exe",/out:AnimateSprite.lib @AnimateSpriteObjFiles.txt,C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\)
    Making PB library...
    RunProgram("C:\Program Files\PureBasic\\SDK\LibraryMaker.exe", /TO "C:\Program Files\PureBasic\purelibraries\userlibraries" /COMPRESSED /NOUNICODEWARNING "C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\AnimateSprite.Desc",C:\Documents and Settings\J. Baker\Local Settings\Temp\TBTemp\41B94AB55B093590\)

Posted: Wed May 20, 2009 2:35 pm
by lexvictory
hmmm. according to that, it all worked fine.
All works fine here too (x86 and x64)

Come to think of it, I think I've had problems before when the UserLib name (the source file name in TB's case) has the same name as the Procedure.
Try renaming the source file, delete the userlib, and Tailbite it again...

Posted: Wed May 20, 2009 2:42 pm
by J. Baker
lexvictory wrote:hmmm. according to that, it all worked fine.
All works fine here too (x86 and x64)

Come to think of it, I think I've had problems before when the UserLib name (the source file name in TB's case) has the same name as the Procedure.
Try renaming the source file, delete the userlib, and Tailbite it again...
[ERROR] Invalid memory access. [read error at address 0]

Posted: Wed May 20, 2009 9:34 pm
by ABBKlaus
J. Baker wrote:[ERROR] Invalid memory access. [read error at address 0]
you can´t use static inside ProcedureDLL, use a Global in the initfunction instead :wink:

Posted: Thu May 21, 2009 1:06 am
by J. Baker
ABBKlaus wrote:
J. Baker wrote:[ERROR] Invalid memory access. [read error at address 0]
you can´t use static inside ProcedureDLL, use a Global in the initfunction instead :wink:
That's not good as I need Static.

Posted: Thu May 21, 2009 1:52 am
by lexvictory
J. Baker wrote:That's not good as I need Static.
Why? So long as you don't use the variable name elsewhere it's the same thing.

Posted: Thu May 21, 2009 1:59 am
by J. Baker
lexvictory wrote:
J. Baker wrote:That's not good as I need Static.
Why? So long as you don't use the variable name elsewhere it's the same thing.
It will be needed to animate more then one sprite. I'll have to come up with another method.