Angelscript/docs/manual/doc_hello_world.html

234 lines
24 KiB
HTML
Raw Permalink Normal View History

2021-04-12 18:25:02 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>AngelScript: Your first script</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="aslogo_small.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">AngelScript
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('doc_hello_world.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="PageDoc"><div class="header">
<div class="headertitle">
<div class="title">Your first script </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>This tutorial will show you the basics on how to configure the engine, compile a script, and then execute it. The code in this article is not complete, it only contains the relevant parts to explain the basic structure for using the script library. For complete source codes see the <a class="el" href="doc_samples.html">samples</a> that come with the SDK.</p>
<p>In this tutorial a couple of add-ons are used to make the code easier. You are not required to use these in your own application, but they will most likely let you get your project up and running faster. You'll want to take a look at the rest of the <a class="el" href="doc_addon.html">add-ons</a> later on to see what else may be useful for you.</p>
<div class="fragment"><div class="line"><span class="comment">// Include the definitions of the script library and the add-ons we&#39;ll use.</span></div>
<div class="line"><span class="comment">// The project settings may need to be configured to let the compiler where</span></div>
<div class="line"><span class="comment">// to find these headers. Don&#39;t forget to add the source modules for the</span></div>
<div class="line"><span class="comment">// add-ons to your project as well so that they will be compiled into the </span></div>
<div class="line"><span class="comment">// application.</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="angelscript_8h.html">angelscript.h</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;scriptstdstring/scriptstdstring.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;scriptbuilder/scriptbuilder.h&gt;</span></div>
</div><!-- fragment --><p>Being an embedded scripting library there isn't much that AngelScript allows the scripts to do by themselves, so the first thing the application must do is to <a class="el" href="doc_register_api.html">register the interface</a> that the script will have to interact with the application. The interface may consist of functions, variables, and even complete classes.</p>
<p>Pay special attention to how the <a class="el" href="doc_compile_script.html#doc_compile_script_msg">message callback</a> is registered right after the engine is created. The message callback is used by the engine to give human readable error messages when something isn't working as it should, e.g. a registration is done incorrectly, or a script has an error that fails to compile. While you still need to verify the return codes, the message callback can give you valuable information that will let you figure out what is wrong without much effort.</p>
<div class="fragment"><div class="line"><span class="comment">// Create the script engine</span></div>
<div class="line"><a class="code" href="classas_i_script_engine.html">asIScriptEngine</a> *engine = <a class="code" href="group__api__principal__functions.html#gacb6a62345d9cca6c9b5a3dac67d80d0b">asCreateScriptEngine</a>();</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Set the message callback to receive information on errors in human readable form.</span></div>
<div class="line"><span class="keywordtype">int</span> r = engine-&gt;<a class="code" href="classas_i_script_engine.html#a74192fe950808eb72a64e3e371f0ea02">SetMessageCallback</a>(<a class="code" href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae">asFUNCTION</a>(MessageCallback), 0, <a class="code" href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4">asCALL_CDECL</a>); assert( r &gt;= 0 );</div>
<div class="line"> </div>
<div class="line"><span class="comment">// AngelScript doesn&#39;t have a built-in string type, as there is no definite standard </span></div>
<div class="line"><span class="comment">// string type for C++ applications. Every developer is free to register its own string type.</span></div>
<div class="line"><span class="comment">// The SDK do however provide a standard add-on for registering a string type, so it&#39;s not</span></div>
<div class="line"><span class="comment">// necessary to implement the registration yourself if you don&#39;t want to.</span></div>
<div class="line">RegisterStdString(engine);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Register the function that we want the scripts to call </span></div>
<div class="line">r = engine-&gt;<a class="code" href="classas_i_script_engine.html#a2f84b9b51733f22c68b8448b02c2f1c7">RegisterGlobalFunction</a>(<span class="stringliteral">&quot;void print(const string &amp;in)&quot;</span>, <a class="code" href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae">asFUNCTION</a>(print), <a class="code" href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4">asCALL_CDECL</a>); assert( r &gt;= 0 );</div>
</div><!-- fragment --><p>After the engine has been configured, the next step is to compile the scripts that should be executed.</p>
<p>The following is our script that will call the registered <code>print</code> function to write <code>Hello world</code> on the standard output stream. Let's say it's stored in the file <code>test.as</code>.</p>
<pre>
void main()
{
print("Hello world\n");
}
</pre><p>Here's the code for loading the script file and compiling it. The AngelScript engine itself doesn't have access to the filesystem so the loading the files has to be done by the application. Here we're going to use the <a class="el" href="doc_addon_build.html">script builder</a> add-on, which does the loading of the script files, and some preprocessing, such as handling #include directives.</p>
<div class="fragment"><div class="line"><span class="comment">// The CScriptBuilder helper is an add-on that loads the file,</span></div>
<div class="line"><span class="comment">// performs a pre-processing pass if necessary, and then tells</span></div>
<div class="line"><span class="comment">// the engine to build a script module.</span></div>
<div class="line">CScriptBuilder builder;</div>
<div class="line"><span class="keywordtype">int</span> r = builder.StartNewModule(engine, <span class="stringliteral">&quot;MyModule&quot;</span>); </div>
<div class="line"><span class="keywordflow">if</span>( r &lt; 0 ) </div>
<div class="line">{</div>
<div class="line"> <span class="comment">// If the code fails here it is usually because there</span></div>
<div class="line"> <span class="comment">// is no more memory to allocate the module</span></div>
<div class="line"> printf(<span class="stringliteral">&quot;Unrecoverable error while starting a new module.\n&quot;</span>);</div>
<div class="line"> <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="line">r = builder.AddSectionFromFile(<span class="stringliteral">&quot;test.as&quot;</span>);</div>
<div class="line"><span class="keywordflow">if</span>( r &lt; 0 )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The builder wasn&#39;t able to load the file. Maybe the file</span></div>
<div class="line"> <span class="comment">// has been removed, or the wrong name was given, or some</span></div>
<div class="line"> <span class="comment">// preprocessing commands are incorrectly written.</span></div>
<div class="line"> printf(<span class="stringliteral">&quot;Please correct the errors in the script and try again.\n&quot;</span>);</div>
<div class="line"> <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="line">r = builder.BuildModule();</div>
<div class="line"><span class="keywordflow">if</span>( r &lt; 0 )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// An error occurred. Instruct the script writer to fix the </span></div>
<div class="line"> <span class="comment">// compilation errors that were listed in the output stream.</span></div>
<div class="line"> printf(<span class="stringliteral">&quot;Please correct the errors in the script and try again.\n&quot;</span>);</div>
<div class="line"> <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
</div><!-- fragment --><p>The last step is to identify the function that is to be called, and set up a context for executing it.</p>
<div class="fragment"><div class="line"><span class="comment">// Find the function that is to be called. </span></div>
<div class="line"><a class="code" href="classas_i_script_module.html">asIScriptModule</a> *mod = engine-&gt;<a class="code" href="classas_i_script_engine.html#a9f7cdc52b59034e6e55eb8a56b427aa4">GetModule</a>(<span class="stringliteral">&quot;MyModule&quot;</span>);</div>
<div class="line"><a class="code" href="classas_i_script_function.html">asIScriptFunction</a> *func = mod-&gt;<a class="code" href="classas_i_script_module.html#ab4754d55d8667aefbed135b4794d461b">GetFunctionByDecl</a>(<span class="stringliteral">&quot;void main()&quot;</span>);</div>
<div class="line"><span class="keywordflow">if</span>( func == 0 )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The function couldn&#39;t be found. Instruct the script writer</span></div>
<div class="line"> <span class="comment">// to include the expected function in the script.</span></div>
<div class="line"> printf(<span class="stringliteral">&quot;The script must have the function &#39;void main()&#39;. Please add it and try again.\n&quot;</span>);</div>
<div class="line"> <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Create our context, prepare it, and then execute</span></div>
<div class="line"><a class="code" href="classas_i_script_context.html">asIScriptContext</a> *ctx = engine-&gt;<a class="code" href="classas_i_script_engine.html#a2630e1cd03ffab0fee9b820bf0afe42a">CreateContext</a>();</div>
<div class="line">ctx-&gt;<a class="code" href="classas_i_script_context.html#a43976f42dfc6c1af23e132d36265173a">Prepare</a>(func);</div>
<div class="line"><span class="keywordtype">int</span> r = ctx-&gt;<a class="code" href="classas_i_script_context.html#a8e52894432737acac2e1a422e496bf84">Execute</a>();</div>
<div class="line"><span class="keywordflow">if</span>( r != <a class="code" href="angelscript_8h.html#a867f14b4137dd4602fda1e616b217a69a6d3730dd7a91aff81cafaaca4e93efaa">asEXECUTION_FINISHED</a> )</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// The execution didn&#39;t complete as expected. Determine what happened.</span></div>
<div class="line"> <span class="keywordflow">if</span>( r == <a class="code" href="angelscript_8h.html#a867f14b4137dd4602fda1e616b217a69aa3d548fa7d2278d848e50222b700c6c8">asEXECUTION_EXCEPTION</a> )</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// An exception occurred, let the script writer know what happened so it can be corrected.</span></div>
<div class="line"> printf(<span class="stringliteral">&quot;An exception &#39;%s&#39; occurred. Please correct the code and try again.\n&quot;</span>, ctx-&gt;<a class="code" href="classas_i_script_context.html#a46e2411bc84e99f57e7d9fe2374bb479">GetExceptionString</a>());</div>
<div class="line"> }</div>
<div class="line">}</div>
</div><!-- fragment --><p>The exception handling above is very basic. The application may also obtain information about line number, function, call stack, and even values of local and global variables if wanted.</p>
<p>Don't forget to clean up after you're done with the engine.</p>
<div class="fragment"><div class="line"><span class="comment">// Clean up</span></div>
<div class="line">ctx-&gt;<a class="code" href="classas_i_script_context.html#a1b13a5f3e58627e9ff4300c0c6f0f3cf">Release</a>();</div>
<div class="line">engine-&gt;<a class="code" href="classas_i_script_engine.html#a28c3800620d4aeaca75d084391eb758e">ShutDownAndRelease</a>();</div>
</div><!-- fragment --><h1><a class="anchor" id="doc_hello_world_1"></a>
Helper functions</h1>
<p>The print function is implemented as a very simple wrapper on the printf function.</p>
<div class="fragment"><div class="line"><span class="comment">// Print the script string to the standard output stream</span></div>
<div class="line"><span class="keywordtype">void</span> print(<span class="keywordtype">string</span> &amp;msg)</div>
<div class="line">{</div>
<div class="line"> printf(<span class="stringliteral">&quot;%s&quot;</span>, msg.c_str());</div>
<div class="line">}</div>
</div><!-- fragment --><dl class="section see"><dt>See also</dt><dd><a class="el" href="doc_compile_script.html#doc_compile_script_msg">Message callback</a>, <a class="el" href="doc_addon_build.html">Script builder</a>, <a class="el" href="doc_addon_std_string.html">string object</a>, <a class="el" href="doc_samples.html">Samples</a> </dd></dl>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div class="ttc" id="aclassas_i_script_context_html"><div class="ttname"><a href="classas_i_script_context.html">asIScriptContext</a></div><div class="ttdoc">The interface to the virtual machine.</div><div class="ttdef"><b>Definition:</b> angelscript.h:2717</div></div>
<div class="ttc" id="aclassas_i_script_module_html_ab4754d55d8667aefbed135b4794d461b"><div class="ttname"><a href="classas_i_script_module.html#ab4754d55d8667aefbed135b4794d461b">asIScriptModule::GetFunctionByDecl</a></div><div class="ttdeci">virtual asIScriptFunction * GetFunctionByDecl(const char *decl) const =0</div><div class="ttdoc">Returns the function by its declaration.</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a9f7cdc52b59034e6e55eb8a56b427aa4"><div class="ttname"><a href="classas_i_script_engine.html#a9f7cdc52b59034e6e55eb8a56b427aa4">asIScriptEngine::GetModule</a></div><div class="ttdeci">virtual asIScriptModule * GetModule(const char *module, asEGMFlags flag=asGM_ONLY_IF_EXISTS)=0</div><div class="ttdoc">Return an interface pointer to the module.</div></div>
<div class="ttc" id="aclassas_i_script_context_html_a8e52894432737acac2e1a422e496bf84"><div class="ttname"><a href="classas_i_script_context.html#a8e52894432737acac2e1a422e496bf84">asIScriptContext::Execute</a></div><div class="ttdeci">virtual int Execute()=0</div><div class="ttdoc">Executes the prepared function.</div></div>
<div class="ttc" id="aangelscript_8h_html_a867f14b4137dd4602fda1e616b217a69aa3d548fa7d2278d848e50222b700c6c8"><div class="ttname"><a href="angelscript_8h.html#a867f14b4137dd4602fda1e616b217a69aa3d548fa7d2278d848e50222b700c6c8">asEXECUTION_EXCEPTION</a></div><div class="ttdeci">@ asEXECUTION_EXCEPTION</div><div class="ttdoc">The execution was terminated by an unhandled script exception.</div><div class="ttdef"><b>Definition:</b> angelscript.h:404</div></div>
<div class="ttc" id="aclassas_i_script_engine_html"><div class="ttname"><a href="classas_i_script_engine.html">asIScriptEngine</a></div><div class="ttdoc">The engine interface.</div><div class="ttdef"><b>Definition:</b> angelscript.h:1092</div></div>
<div class="ttc" id="aclassas_i_script_context_html_a46e2411bc84e99f57e7d9fe2374bb479"><div class="ttname"><a href="classas_i_script_context.html#a46e2411bc84e99f57e7d9fe2374bb479">asIScriptContext::GetExceptionString</a></div><div class="ttdeci">virtual const char * GetExceptionString()=0</div><div class="ttdoc">Returns the exception string text.</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a2f84b9b51733f22c68b8448b02c2f1c7"><div class="ttname"><a href="classas_i_script_engine.html#a2f84b9b51733f22c68b8448b02c2f1c7">asIScriptEngine::RegisterGlobalFunction</a></div><div class="ttdeci">virtual int RegisterGlobalFunction(const char *declaration, const asSFuncPtr &amp;funcPointer, asDWORD callConv, void *auxiliary=0)=0</div><div class="ttdoc">Registers a global function.</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a74192fe950808eb72a64e3e371f0ea02"><div class="ttname"><a href="classas_i_script_engine.html#a74192fe950808eb72a64e3e371f0ea02">asIScriptEngine::SetMessageCallback</a></div><div class="ttdeci">virtual int SetMessageCallback(const asSFuncPtr &amp;callback, void *obj, asDWORD callConv)=0</div><div class="ttdoc">Sets a message callback that will receive compiler messages.</div></div>
<div class="ttc" id="aangelscript_8h_html_a78f8f2c7f1c88b12e74a5ac47b4184ae"><div class="ttname"><a href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae">asFUNCTION</a></div><div class="ttdeci">#define asFUNCTION(f)</div><div class="ttdoc">Returns an asSFuncPtr representing the function specified by the name.</div><div class="ttdef"><b>Definition:</b> angelscript.h:675</div></div>
<div class="ttc" id="aangelscript_8h_html_a867f14b4137dd4602fda1e616b217a69a6d3730dd7a91aff81cafaaca4e93efaa"><div class="ttname"><a href="angelscript_8h.html#a867f14b4137dd4602fda1e616b217a69a6d3730dd7a91aff81cafaaca4e93efaa">asEXECUTION_FINISHED</a></div><div class="ttdeci">@ asEXECUTION_FINISHED</div><div class="ttdoc">The context has successfully completed the execution.</div><div class="ttdef"><b>Definition:</b> angelscript.h:398</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a2630e1cd03ffab0fee9b820bf0afe42a"><div class="ttname"><a href="classas_i_script_engine.html#a2630e1cd03ffab0fee9b820bf0afe42a">asIScriptEngine::CreateContext</a></div><div class="ttdeci">virtual asIScriptContext * CreateContext()=0</div><div class="ttdoc">Creates a new script context.</div></div>
<div class="ttc" id="agroup__api__principal__functions_html_gacb6a62345d9cca6c9b5a3dac67d80d0b"><div class="ttname"><a href="group__api__principal__functions.html#gacb6a62345d9cca6c9b5a3dac67d80d0b">asCreateScriptEngine</a></div><div class="ttdeci">AS_API asIScriptEngine * asCreateScriptEngine(asDWORD version=ANGELSCRIPT_VERSION)</div><div class="ttdoc">Creates the script engine.</div></div>
<div class="ttc" id="aangelscript_8h_html"><div class="ttname"><a href="angelscript_8h.html">angelscript.h</a></div><div class="ttdoc">The API definition for AngelScript.</div></div>
<div class="ttc" id="aclassas_i_script_function_html"><div class="ttname"><a href="classas_i_script_function.html">asIScriptFunction</a></div><div class="ttdoc">The interface for a script function description.</div><div class="ttdef"><b>Definition:</b> angelscript.h:3823</div></div>
<div class="ttc" id="aclassas_i_script_module_html"><div class="ttname"><a href="classas_i_script_module.html">asIScriptModule</a></div><div class="ttdoc">The interface to the script modules.</div><div class="ttdef"><b>Definition:</b> angelscript.h:2218</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a28c3800620d4aeaca75d084391eb758e"><div class="ttname"><a href="classas_i_script_engine.html#a28c3800620d4aeaca75d084391eb758e">asIScriptEngine::ShutDownAndRelease</a></div><div class="ttdeci">virtual int ShutDownAndRelease()=0</div><div class="ttdoc">Shuts down the engine then decrease the reference counter.</div></div>
<div class="ttc" id="aangelscript_8h_html_a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4"><div class="ttname"><a href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4">asCALL_CDECL</a></div><div class="ttdeci">@ asCALL_CDECL</div><div class="ttdoc">A cdecl function.</div><div class="ttdef"><b>Definition:</b> angelscript.h:226</div></div>
<div class="ttc" id="aclassas_i_script_context_html_a43976f42dfc6c1af23e132d36265173a"><div class="ttname"><a href="classas_i_script_context.html#a43976f42dfc6c1af23e132d36265173a">asIScriptContext::Prepare</a></div><div class="ttdeci">virtual int Prepare(asIScriptFunction *func)=0</div><div class="ttdoc">Prepares the context for execution of the function.</div></div>
<div class="ttc" id="aclassas_i_script_context_html_a1b13a5f3e58627e9ff4300c0c6f0f3cf"><div class="ttname"><a href="classas_i_script_context.html#a1b13a5f3e58627e9ff4300c0c6f0f3cf">asIScriptContext::Release</a></div><div class="ttdeci">virtual int Release() const =0</div><div class="ttdoc">Decrease reference counter.</div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Sat Dec 5 2020 23:20:24 for AngelScript by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.18 </li>
</ul>
</div>
</body>
</html>