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

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

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.