Cool External load unLoad libary stack handler Script (was:Standalone App Question)

Chipp Walters chipp at chipp.com
Tue Aug 9 16:47:39 EDT 2005


Had to rename this gem so that it could be easily searched and found in 
the Rev Use-List!!!

Thanks Trevor :-)

-Chipp

Trevor DeVore wrote:

> 
> That being said, I prefer a different method when dealing with  externals.
> 
> When using externals I like to be able to load/unload the external  
> whenever I want.  This is necessary if you want the ability to update  
> an external while your application is running.  Now, in order to  unload 
> an external it must be attached to a stack that 1) has the  
> destroyWindow property set to true and 2) is open, not just in  memory.  
> With that in mind, whenever an application launches it can  create a 
> stack at runtime (never actually exists on disk) that has  the 
> properties we need.  For example:
> 
> on loadAppExternals
>     local tExternals
> 
>     ----------
>     --> EXTERNALS
>     ----------
>     put "myExternal.bundle" &cr& "myExternal.dll" into tExternals
> 
>     ----------
>     --> CREATE EXTERNALS STACK IN MEMORY
>     ----------
>     if tExternals <> empty then
>         if there is not a stack "myExternals" then
>             reset templateStack
>             set destroyWindow of templateStack to true
>             set destroyStack of templateStack to true
>             set visible of templateStack to false
>             set externals of templateStack to tExternals
> 
>             create stack "myExternals"
>             reset templateStack
>         end if
> 
>         go stack "myExternals"
>         start using stack "myExternals"
>     end if
> end loadAppExternals
> 
> Now you can call loadAppExternals whenever you need to load externals  
> for your application.  If you need to unload the externals just close  
> the stack:
> 
> close stack "myExternals"
> 
> The externals will be unloaded from memory and you can update the  
> external files on disk.
> 
> If you ever need to check if an external loaded correctly or is  
> available you can check the externalPackages property of the  
> "myExternals" stack.  Every external has a string identifier that the  
> person who made the external assigns to it.  This shows up in the  
> externalPackages property of the stack only when the external has  
> successfully loaded.  So if you have an external that is identified  
> with the string "MySuperExternal" you could have some code like this:
> 
> on checkAppExternals
>     local tRequiredExternals,tExternal
> 
>     if there is not a stack "myExternals" then
>         answer "You didn't bother loading the externals stack.  Try  
> again."
>         return empty
>     end if
> 
>     put "MySuperExternal" into tRequiredExternals
> 
>     repeat for each line tExternal in tRequiredExternals
>         if tExternal is not among lines of externalPackages of stack  
> "myExternals" then
>             answer "Oh where, oh where has my external gone?"
>             return empty
>         end if
>     end repeat
> end checkAppExternals
> 
> This method of working with externals has proven to work really well  
> for me.
> 
> 


More information about the use-livecode mailing list