Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > bad97183153701b09df5fae1052b1c30 > files > 1798

crystalspace-doc-1.2.1-5mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Crystal Space 1.2.1: Shared Class Facility (SCF) (Crystal Space 1.2.1 Public API Reference)</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<table border="0" cellpadding="0" cellspacing="0" width="100%" class="head">
 <tr height="59">
  <td class="head" width="202" valign="bottom" style="padding-left:0;"><a href="http://www.crystalspace3d.org/"><img src="csblur.png" width="236" height="59" alt="CrystalSpace" border="0"></a></td>
  <td class="head"><h2>Public API Reference</h2></td>
 </tr>
 <tr height="11">
  <td colspan="2" class="headshadow" valign="top" style="padding-left:0;"><img src="csblurb.png" width="236" height="11" alt="" border="0"></td>
 </tr>
</table>
<div class="content">
<!-- Generated by Doxygen 1.5.3 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
    <li><a href="classes.html"><span>Classes</span></a></li>
    <li><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  </ul>
</div>
<h1>Shared Class Facility (SCF)</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structiBase.html">iBase</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is the basic interface: all other interfaces should be derived from this one, this will allow us to always use at least some minimal functionality given any interface pointer.  <a href="structiBase.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structiComponent.html">iComponent</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This interface describes a generic component in Crystal Space.  <a href="structiComponent.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structiFactory.html">iFactory</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="structiFactory.html" title="iFactory is an interface that is used to create instances of shared classes.">iFactory</a> is an interface that is used to create instances of shared classes.  <a href="structiFactory.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structiObjectRegistry.html">iObjectRegistry</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This interface serves as a registry of other objects.  <a href="structiObjectRegistry.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structiObjectRegistryIterator.html">iObjectRegistryIterator</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Use an instance of this class to iterate over objects in the object registry.  <a href="structiObjectRegistryIterator.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structiPluginIterator.html">iPluginIterator</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An iterator to iterate over all plugins in the plugin manager.  <a href="structiPluginIterator.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structiPluginManager.html">iPluginManager</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is the plugin manager.  <a href="structiPluginManager.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structiSCF.html">iSCF</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="structiSCF.html" title="iSCF is the interface that allows using SCF functions from shared classes.">iSCF</a> is the interface that allows using SCF functions from shared classes.  <a href="structiSCF.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classscfFakeInterface.html">scfFakeInterface&lt; If &gt;</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fugly helper to resolve some bad situations.  <a href="classscfFakeInterface.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classscfImplementation.html">scfImplementation&lt; Class &gt;</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Baseclass for the SCF implementation templates.  <a href="classscfImplementation.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classscfImplementationPooled.html">scfImplementationPooled&lt; Super, Allocator &gt;</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Derive an SCF implementation from this class to have it pooled.  <a href="classscfImplementationPooled.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classscfInterfaceTraits.html">scfInterfaceTraits&lt; Interface &gt;</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Interface information query class.  <a href="classscfInterfaceTraits.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g229540542f2e13fbda9702b00fe5d04a">scfRegisterStaticClass</a> (<a class="el" href="group__scf.html#gead94ba73ae2e569a89ea7d5aa20db9d">scfFactoryFunc</a>, const char *iClassID, const char *Description, const char *Dependencies=0)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register a static class.  <a href="#g229540542f2e13fbda9702b00fe5d04a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g0ad0a0030e5910037392ab6e4984f8ff">scfRegisterStaticClasses</a> (char const *xml)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register a static class.  <a href="#g0ad0a0030e5910037392ab6e4984f8ff"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gdf22686621a246ba1de548575f3fc029">scfRegisterStaticFactoryFunc</a> (<a class="el" href="group__scf.html#gead94ba73ae2e569a89ea7d5aa20db9d">scfFactoryFunc</a>, const char *FactClass)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register a static class.  <a href="#gdf22686621a246ba1de548575f3fc029"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gcdb1b8ee47910e5b7ea462c354d4ac98">CS_LOAD_PLUGIN</a>(Object, ClassID, Interface)&nbsp;&nbsp;&nbsp;csLoadPlugin&lt;Interface&gt; (Object, ClassID)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g1de42472494732840be02de385f7999a">CS_LOAD_PLUGIN_ALWAYS</a>(Object, ClassID)&nbsp;&nbsp;&nbsp;csLoadPluginAlways (Object, ClassID)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g453f1f8878aafb523944c206beb05873">CS_QUERY_PLUGIN_CLASS</a>(Object, ClassID, Interface)&nbsp;&nbsp;&nbsp;csQueryPluginClass&lt;Interface&gt; (Object, ClassID)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compatbility macro.  <a href="#g453f1f8878aafb523944c206beb05873"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb3fb7f6a541c017fbcd04fcbf75288ae"></a><!-- doxytag: member="scf::CS_TYPENAME" ref="gb3fb7f6a541c017fbcd04fcbf75288ae" args="(x)" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gb3fb7f6a541c017fbcd04fcbf75288ae">CS_TYPENAME</a>(x)&nbsp;&nbsp;&nbsp;0</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g8b371049a76e7d2c8a2fab1cb1f189eb">SCF_CONSTRUCT_EMBEDDED_IBASE</a>(Interface)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_CONSTRUCT_EMBEDDED_IBASE macro should be invoked inside the constructor of a class that has an embedded interface (not inside the constructor of the embedded interface).  <a href="#g8b371049a76e7d2c8a2fab1cb1f189eb"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g1a458452568fb70762717a993d85bb38">SCF_CONSTRUCT_IBASE</a>(Parent)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_CONSTRUCT_IBASE macro should be invoked inside the constructor of a class (not inside an embedded interface).  <a href="#g1a458452568fb70762717a993d85bb38"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g5bdabeb185cb2a676ce5e223aab4ecd2">SCF_CONSTRUCT_VERSION</a>(Major, Minor, Micro)&nbsp;&nbsp;&nbsp;((Major &lt;&lt; 24) | (Minor &lt;&lt; 16) | Micro)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Use this macro to construct interface version numbers.  <a href="#g5bdabeb185cb2a676ce5e223aab4ecd2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g5b0b8a41841a8901731fdd009b8727eb">SCF_CREATE_INSTANCE</a>(ClassID, Interface)&nbsp;&nbsp;&nbsp;SCF_CREATE_INSTANCE_is_deprecated&lt;Interface&gt; (ClassID)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g1c5273660c64350850cb55a4a04f7aae">SCF_DECLARE_EMBEDDED_IBASE</a>(OuterClass)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">SCF_DECLARE_EMBEDDED_IBASE is used to declare the methods of <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> inside an embedded class that is exposed via QueryInterface.  <a href="#g1c5273660c64350850cb55a4a04f7aae"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g3a58a1f2306d454390e234d6361ddffe">SCF_DECLARE_IBASE</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This macro should be embedded into any SCF-capable class definition to declare the minimal functionality required by <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> interface.  <a href="#g3a58a1f2306d454390e234d6361ddffe"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g28edb7c87e3f5e9558539e156dee8259">SCF_DECLARE_IBASE_EXT</a>(ParentClass)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The following macro is used in "expansion SCF classes".  <a href="#g28edb7c87e3f5e9558539e156dee8259"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g2c6ba99ad6c27369aaf352a41a012223">SCF_DEFINE_FACTORY_FUNC_REGISTRATION</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define the C++ class needed to register an SCF class, but don't do any automatic registration.  <a href="#g2c6ba99ad6c27369aaf352a41a012223"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gf43af0ec1c503ba57f60766aa3c88e5c">SCF_DESTRUCT_EMBEDDED_IBASE</a>(Interface)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_DESTRUCT_EMBEDDED_IBASE macro should be invoked inside the destructor of a class that has an embedded interface (not inside the destructor of the embedded interface).  <a href="#gf43af0ec1c503ba57f60766aa3c88e5c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g877921891b0406c28d11a7e378be36f1">SCF_DESTRUCT_IBASE</a>()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_DESTRUCT_IBASE macro should be invoked inside the destructor of a class (not inside an embedded interface).  <a href="#g877921891b0406c28d11a7e378be36f1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gd8ce85493f112b4cb7608dccddcbfab9">SCF_IMPLEMENT_EMBEDDED_IBASE</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">SCF_IMPLEMENT_EMBEDDED_IBASE should be used to implement embedded interfaces derived from <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>.  <a href="#gd8ce85493f112b4cb7608dccddcbfab9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gbd1ed82014e91ff4e6b0f3d86716e256">SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#gbd1ed82014e91ff4e6b0f3d86716e256" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF() macro implements the DecRef() method for...">SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF()</a> macro implements the DecRef() method for an embedded class in a C++ source module.  <a href="#gbd1ed82014e91ff4e6b0f3d86716e256"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#ga3cc3f0a892c0f3296fa15b8e297d92f">SCF_IMPLEMENT_EMBEDDED_IBASE_END</a>&nbsp;&nbsp;&nbsp;SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_EMBEDDED_IBASE_END macro is used to finish an SCF_IMPLEMENT_EMBEDDED_IBASE definition.  <a href="#ga3cc3f0a892c0f3296fa15b8e297d92f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g80f42c8c1fafd205917d3b3b7b831ec6">SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g80f42c8c1fafd205917d3b3b7b831ec6" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT() macro implements the GetRefCount()...">SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT()</a> macro implements the GetRefCount() method for an embedded class in a C++ source module.  <a href="#g80f42c8c1fafd205917d3b3b7b831ec6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gc94d6b350ecfcac7ed08aaaadf04fb56">SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#gc94d6b350ecfcac7ed08aaaadf04fb56" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF() macro implements the IncRef() method for...">SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF()</a> macro implements the IncRef() method for an embedded class in a C++ source module.  <a href="#gc94d6b350ecfcac7ed08aaaadf04fb56"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g8dd36ea504eab347795fa91c98225269">SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g8dd36ea504eab347795fa91c98225269" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY() macro implements the opening boilerplate...">SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY()</a> macro implements the opening boilerplate for the QueryInterface() method for an embedded class in a C++ source module.  <a href="#g8dd36ea504eab347795fa91c98225269"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g636b87ffdf233dfb1241c5cb690dd18c">SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END macro implements the closing boilerplate for the QueryInterface() method for a class in an embedded C++ source module.  <a href="#g636b87ffdf233dfb1241c5cb690dd18c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#ge4a9107b28eabdd14ce0172fe1820781">SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#ge4a9107b28eabdd14ce0172fe1820781" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER() macro implements the AddRefOwner() and...">SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER()</a> macro implements the AddRefOwner() and RemoveRefOwner() for a weak reference.  <a href="#ge4a9107b28eabdd14ce0172fe1820781"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g373349b6fc91662b31ffaf102ef908c2">SCF_IMPLEMENT_FACTORY</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_FACTORY macro is used to define a factory for one of exported classes.  <a href="#g373349b6fc91662b31ffaf102ef908c2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g2ff16a54724c1f00d7985bd971453418">SCF_IMPLEMENT_FACTORY_CREATE</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_FACTORY_CREATE macro is used to define a factory for one of exported classes.  <a href="#g2ff16a54724c1f00d7985bd971453418"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gb0ba5d1d55dc991a49fb67cbfb24166b">SCF_IMPLEMENT_FACTORY_FINIS</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_FACTORY_FINIS macro defines finalization code for a plugin module.  <a href="#gb0ba5d1d55dc991a49fb67cbfb24166b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gb2d4f983b73223294969161c65872274">SCF_IMPLEMENT_FACTORY_INIT</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_FACTORY_INIT macro defines initialization code for a plugin module.  <a href="#gb2d4f983b73223294969161c65872274"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gbcda0c42b7c3a7b12ecdb407bb0ba3d8">SCF_IMPLEMENT_IBASE</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#gbcda0c42b7c3a7b12ecdb407bb0ba3d8" title="The SCF_IMPLEMENT_IBASE() macro should be used within the C++ source module that...">SCF_IMPLEMENT_IBASE()</a> macro should be used within the C++ source module that implements a interface derived from <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>.  <a href="#gbcda0c42b7c3a7b12ecdb407bb0ba3d8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g176199e7058f9f662e4ad178e3e2c9a9">SCF_IMPLEMENT_IBASE_DECREF</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g176199e7058f9f662e4ad178e3e2c9a9" title="The SCF_IMPLEMENT_IBASE_DECREF() macro implements the DecRef() method for a class...">SCF_IMPLEMENT_IBASE_DECREF()</a> macro implements the DecRef() method for a class in a C++ source module.  <a href="#g176199e7058f9f662e4ad178e3e2c9a9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g17899d525bbb5d9bdba293c5f028eb91">SCF_IMPLEMENT_IBASE_END</a>&nbsp;&nbsp;&nbsp;SCF_IMPLEMENT_IBASE_QUERY_END</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_IBASE_END macro is used to finish an SCF_IMPLEMENT_IBASE definition.  <a href="#g17899d525bbb5d9bdba293c5f028eb91"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g15417d8a30b7f466a2eb186889aab0a1">SCF_IMPLEMENT_IBASE_EXT</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This macro implements same functionality as SCF_IMPLEMENT_IBASE except that it should be used for expansion SCF classes.  <a href="#g15417d8a30b7f466a2eb186889aab0a1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g7c67d5dd0c42e9014b94135ae2ab58e7">SCF_IMPLEMENT_IBASE_EXT_DECREF</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g7c67d5dd0c42e9014b94135ae2ab58e7" title="The SCF_IMPLEMENT_IBASE_EXT_DECREF() macro implements the DecRef() method for a class...">SCF_IMPLEMENT_IBASE_EXT_DECREF()</a> macro implements the DecRef() method for a class extending another SCF class in a C++ source module.  <a href="#g7c67d5dd0c42e9014b94135ae2ab58e7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gb35b13fd96454cd6ff8b70d05be20010">SCF_IMPLEMENT_IBASE_EXT_END</a>&nbsp;&nbsp;&nbsp;SCF_IMPLEMENT_IBASE_EXT_QUERY_END</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This macro implements same functionality as SCF_IMPLEMENT_IBASE_END except that it is used for expansion SCF classes.  <a href="#gb35b13fd96454cd6ff8b70d05be20010"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g2370479942b59428b84236b1e6bad32f">SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g2370479942b59428b84236b1e6bad32f" title="The SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT() macro implements the GetRefCount() method...">SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT()</a> macro implements the GetRefCount() method for a class extending another SCF class in a C++ source module.  <a href="#g2370479942b59428b84236b1e6bad32f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g8439bf789cd1e09faae47d3c591f6910">SCF_IMPLEMENT_IBASE_EXT_INCREF</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g8439bf789cd1e09faae47d3c591f6910" title="The SCF_IMPLEMENT_IBASE_EXT_INCREF() macro implements the IncRef() method for a class...">SCF_IMPLEMENT_IBASE_EXT_INCREF()</a> macro implements the IncRef() method for a class extending another SCF class in a C++ source module.  <a href="#g8439bf789cd1e09faae47d3c591f6910"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g34c31f88ff4057701027fe3e2520b3fd">SCF_IMPLEMENT_IBASE_EXT_QUERY</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g34c31f88ff4057701027fe3e2520b3fd" title="The SCF_IMPLEMENT_IBASE_EXT_QUERY() macro implements the opening boilerplate for...">SCF_IMPLEMENT_IBASE_EXT_QUERY()</a> macro implements the opening boilerplate for the QueryInterface() method for a class extending another SCF class in a C++ source module.  <a href="#g34c31f88ff4057701027fe3e2520b3fd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g70f51e8bc495a9f00382f5be26ffac6c">SCF_IMPLEMENT_IBASE_EXT_QUERY_END</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_IBASE_EXT_QUERY_END macro implements the closing boilerplate for the QueryInterface() method for a class extending another SCF class in a C++ source module.  <a href="#g70f51e8bc495a9f00382f5be26ffac6c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gc364123d75a3bfd0efd48db3ae5cee77">SCF_IMPLEMENT_IBASE_EXT_REFOWNER</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#gc364123d75a3bfd0efd48db3ae5cee77" title="The SCF_IMPLEMENT_IBASE_EXT_REFOWNER() macro implements the AddRefOwner() and RemoveRefOwner()...">SCF_IMPLEMENT_IBASE_EXT_REFOWNER()</a> macro implements the AddRefOwner() and RemoveRefOwner() for a weak reference.  <a href="#gc364123d75a3bfd0efd48db3ae5cee77"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g9e7383896428a0a12c4e4a46362b4e9e">SCF_IMPLEMENT_IBASE_GETREFCOUNT</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g9e7383896428a0a12c4e4a46362b4e9e" title="The SCF_IMPLEMENT_IBASE_GETREFCOUNT() macro implements GetRefCount() for a class...">SCF_IMPLEMENT_IBASE_GETREFCOUNT()</a> macro implements GetRefCount() for a class in a C++ source module.  <a href="#g9e7383896428a0a12c4e4a46362b4e9e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g8a1213fd6984424826788aaee0a3b398">SCF_IMPLEMENT_IBASE_INCREF</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#g8a1213fd6984424826788aaee0a3b398" title="The SCF_IMPLEMENT_IBASE_INCREF() macro implements the IncRef() method for a class...">SCF_IMPLEMENT_IBASE_INCREF()</a> macro implements the IncRef() method for a class in a C++ source module.  <a href="#g8a1213fd6984424826788aaee0a3b398"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gce4cdb30da337f6913d4509343077557">SCF_IMPLEMENT_IBASE_QUERY</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#gce4cdb30da337f6913d4509343077557" title="The SCF_IMPLEMENT_IBASE_QUERY() macro implements the opening boilerplate for the...">SCF_IMPLEMENT_IBASE_QUERY()</a> macro implements the opening boilerplate for the QueryInterface() method for a class in a C++ source module.  <a href="#gce4cdb30da337f6913d4509343077557"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g87b3a81a37585388f074c48328ab8738">SCF_IMPLEMENT_IBASE_QUERY_END</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The SCF_IMPLEMENT_IBASE_QUERY_END macro implements the closing boilerplate for the QueryInterface() method for a class in a C++ source module.  <a href="#g87b3a81a37585388f074c48328ab8738"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#ga14ac21f00cf6a9b7ef2f5743a81f2cf">SCF_IMPLEMENT_IBASE_REFOWNER</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#ga14ac21f00cf6a9b7ef2f5743a81f2cf" title="The SCF_IMPLEMENT_IBASE_REFOWNER() macro implements the AddRefOwner() and RemoveRefOwner()...">SCF_IMPLEMENT_IBASE_REFOWNER()</a> macro implements the AddRefOwner() and RemoveRefOwner() for a weak reference.  <a href="#ga14ac21f00cf6a9b7ef2f5743a81f2cf"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gf6af2f711113e622becbcb69cbdd1fbb">SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <a class="el" href="group__scf.html#gf6af2f711113e622becbcb69cbdd1fbb" title="The SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS() macro implements the scfRemoveRefOwners()...">SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS()</a> macro implements the scfRemoveRefOwners() method for a class in a C++ source module.  <a href="#gf6af2f711113e622becbcb69cbdd1fbb"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g6d31bde1cff22be19c402a540410c6de">SCF_IMPLEMENTS_EMBEDDED_INTERFACE</a>(Interface)&nbsp;&nbsp;&nbsp;SCF_IMPLEMENTS_INTERFACE_COMMON (Interface, (&amp;scf##Interface))</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IMPLEMENT_EMBEDDED_INTERFACE is same as IMPLEMENT_INTERFACE but is used when class implements the interface as an embedded member.  <a href="#g6d31bde1cff22be19c402a540410c6de"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g4933dd6e0823013c37b62e6b99550cd5">SCF_IMPLEMENTS_INTERFACE</a>(Interface)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The IMPLEMENT_INTERFACE macro is used inside QueryInterface function to check if user requested a specific interface, whenever requested version of the interface correspond to the version we have and to return a pointer to that interface if everything is correct.  <a href="#g4933dd6e0823013c37b62e6b99550cd5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gb71260911e51a3c0885241d009fb55f8">SCF_IMPLEMENTS_INTERFACE_COMMON</a>(Interface, Object)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is a common macro used in all IMPLEMENTS_XXX_INTERFACE macros.  <a href="#gb71260911e51a3c0885241d009fb55f8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g32823b8dc2fa987f1e945fa97b793875"></a><!-- doxytag: member="scf::SCF_IN_IMPLEMENTATION_H" ref="g32823b8dc2fa987f1e945fa97b793875" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g32823b8dc2fa987f1e945fa97b793875">SCF_IN_IMPLEMENTATION_H</a>&nbsp;&nbsp;&nbsp;1</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7da6359c3ea79d8ab254f78d0b29af71"></a><!-- doxytag: member="scf::SCF_INIT_TRACKER_ALIASES" ref="g7da6359c3ea79d8ab254f78d0b29af71" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g7da6359c3ea79d8ab254f78d0b29af71">SCF_INIT_TRACKER_ALIASES</a></td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g711056cbf220f268640935926c404ba5">SCF_INTERFACE</a>(Name, Major, Minor, Micro)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">SCF_INTERFACE can be used to define an interface's version number; you should specify interface name and major, minor and micro version components.  <a href="#g711056cbf220f268640935926c404ba5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g08f654e1f5dad17bf5c067fd599fd4ef">SCF_PRINT_CALL_ADDRESS</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Macro for getting the address we were called from (stack backtracing).  <a href="#g08f654e1f5dad17bf5c067fd599fd4ef"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g4866d026c88c980b43d36906766c5db6">SCF_QUERY_INTERFACE</a>(Object, Interface)&nbsp;&nbsp;&nbsp;SCF_QUERY_INTERFACE_is_deprecated&lt;Interface&gt; (Object)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gac32ddfef9f398f67f794f52f2700f22">SCF_QUERY_INTERFACE_SAFE</a>(Object, Interface)&nbsp;&nbsp;&nbsp;SCF_QUERY_INTERFACE_SAFE_is_deprecated&lt;Interface&gt; (Object)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g2ff469be5c227919eb41b976f42dd737">SCF_REGISTER_FACTORY_FUNC</a>(Class)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Used in conjunction with SCF_REGISTER_STATIC_LIBRARY to ensure that a reference to the class(es) registered via SCF_REGISTER_STATIC_LIBRARY are actually linked into the application.  <a href="#g2ff469be5c227919eb41b976f42dd737"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g5c0e60d325c4df9731159efbcb607f28">SCF_REGISTER_STATIC_CLASS</a>(Class, Ident, Desc, Dep)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Automatically register a built-in class with SCF during startup.  <a href="#g5c0e60d325c4df9731159efbcb607f28"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gaf414ebd09d2ece8f0adfbc065aecc8d">SCF_REGISTER_STATIC_LIBRARY</a>(Module, MetaInfo)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Automatically register a static library with SCF during startup.  <a href="#gaf414ebd09d2ece8f0adfbc065aecc8d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc00c0ec6f04407808f2f346093b0371e"></a><!-- doxytag: member="scf::SCF_STATIC_CLASS_CONTEXT" ref="gc00c0ec6f04407808f2f346093b0371e" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gc00c0ec6f04407808f2f346093b0371e">SCF_STATIC_CLASS_CONTEXT</a>&nbsp;&nbsp;&nbsp;&quot;*static*&quot;</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0">SCF_TRACE</a>(x)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want to track miscelaneous SCF activity and recompile.  <a href="#ga06c1028fa2d312a312a06636efa56a0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g4e44cfe80f9a64fdac1e5b29049291ce">SCF_USE_STATIC_PLUGIN</a>(Module)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register a statically linked plugin.  <a href="#g4e44cfe80f9a64fdac1e5b29049291ce"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g654bebfc58b1e4e2c9ef9c6334139c73">SCF_VERSION</a>(Name, Major, Minor, Micro)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">FOR COMPATIBILITY! SCF_VERSION can be used to define an interface's version number; you should specify interface name and major, minor and micro version components.  <a href="#g654bebfc58b1e4e2c9ef9c6334139c73"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="structiBase.html">iBase</a> *(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gead94ba73ae2e569a89ea7d5aa20db9d">scfFactoryFunc</a> )(<a class="el" href="structiBase.html">iBase</a> *)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type of factory function which creates an instance of an SCF class.  <a href="#gead94ba73ae2e569a89ea7d5aa20db9d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd">scfInterfaceID</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type of registered interface handle used by <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">iBase::QueryInterface()</a>.  <a href="#ge3095ac94f71a5ff42374271c90222cd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#ga7cc38364be77246ba6f80b3c98b8c59">scfInterfaceVersion</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Type of interface version used by <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">iBase::QueryInterface()</a>.  <a href="#ga7cc38364be77246ba6f80b3c98b8c59"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom">{ <br>
&nbsp;&nbsp;<a class="el" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e103bd7d223adbf6f6320c245ac38d6bc">SCF_VERBOSE_NONE</a> =  0, 
<a class="el" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e1618478cd455be73b5425af2658c054f">SCF_VERBOSE_PLUGIN_SCAN</a> =  1 &lt;&lt; 0, 
<a class="el" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6ef68a22da73642042e6355dcffdef8a74">SCF_VERBOSE_PLUGIN_LOAD</a> =  1 &lt;&lt; 1, 
<a class="el" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6eeb61d605202afa31732b04143d022e63">SCF_VERBOSE_PLUGIN_REGISTER</a> =  1 &lt;&lt; 2, 
<br>
&nbsp;&nbsp;<a class="el" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e1adcd0e4d15d2bec680094f5154aa4a0">SCF_VERBOSE_CLASS_REGISTER</a> =  1 &lt;&lt; 3, 
<a class="el" href="group__scf.html#ggfa9be5679ab03d785820f2474c5ccc6e5b39fff166e4e12caed2e5cb5ff67ea5">SCF_VERBOSE_ALL</a> =  ~0
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">SCF verbosity flags.  <a href="group__scf.html#gfa9be5679ab03d785820f2474c5ccc6e">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#gf4a34e36cd27e680cfcf002cca9729c7">csLoadPlugin</a> (<a class="el" href="structiObjectRegistry.html">iObjectRegistry</a> *object_reg, const char *ClassID)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tell plugin manager to load a plugin.  <a href="#gf4a34e36cd27e680cfcf002cca9729c7"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#gb779ffb37d64ca82d74d416d188d0707">csLoadPlugin</a> (<a class="el" href="structiPluginManager.html">iPluginManager</a> *mgr, const char *ClassID)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tell plugin manager to load a plugin.  <a href="#gb779ffb37d64ca82d74d416d188d0707"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; <a class="el" href="structiBase.html">iBase</a> &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#g080cc89b6f142d13e81bd3b1e5da3cae">csLoadPluginAlways</a> (<a class="el" href="structiPluginManager.html">iPluginManager</a> *mgr, const char *ClassID)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Same as <a class="el" href="group__scf.html#gb779ffb37d64ca82d74d416d188d0707" title="Tell plugin manager to load a plugin.">csLoadPlugin()</a> but does not bother asking for a interface.  <a href="#g080cc89b6f142d13e81bd3b1e5da3cae"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#g94cc7866d797878559c05cabf702e3fb">csLoadPluginCheck</a> (<a class="el" href="structiObjectRegistry.html">iObjectRegistry</a> *object_reg, const char *ClassID, bool report=true)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tell plugin manager to load a plugin but first check if the plugin is not already loaded.  <a href="#g94cc7866d797878559c05cabf702e3fb"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#g44411dc666c117c9eb38e7c43140a3a0">csLoadPluginCheck</a> (<a class="el" href="structiPluginManager.html">iPluginManager</a> *mgr, const char *ClassID)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tell plugin manager to load a plugin but first check if the plugin is not already loaded.  <a href="#g44411dc666c117c9eb38e7c43140a3a0"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#g4c6e52d0906212c2ca5b49fb507afb05">csQueryPluginClass</a> (<a class="el" href="structiPluginManager.html">iPluginManager</a> *mgr, const char *ClassID)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find a plugin by its class ID.  <a href="#g4c6e52d0906212c2ca5b49fb507afb05"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#g4c52fd4507c44be72dcff8fa1ec8d307">csQueryRegistryOrLoad</a> (<a class="el" href="structiObjectRegistry.html">iObjectRegistry</a> *Reg, const char *classID, bool report=true)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Use this macro to query the object registry, loading a plugin if needed.  <a href="#g4c52fd4507c44be72dcff8fa1ec8d307"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gcf034213f44f64d75d5bd2e437ce19eb"></a><!-- doxytag: member="scf::SCF_CREATE_INSTANCE_is_deprecated" ref="gcf034213f44f64d75d5bd2e437ce19eb" args="(char const *const ClassID)" -->
template&lt;class Interface&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#gcf034213f44f64d75d5bd2e437ce19eb">SCF_CREATE_INSTANCE_is_deprecated</a> (char const *const ClassID)</td></tr>

<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g98c632b9063c1700ee76f65f077812f5"></a><!-- doxytag: member="scf::SCF_QUERY_INTERFACE_is_deprecated" ref="g98c632b9063c1700ee76f65f077812f5" args="(ClassPtr object)" -->
template&lt;class Interface, class ClassPtr&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#g98c632b9063c1700ee76f65f077812f5">SCF_QUERY_INTERFACE_is_deprecated</a> (ClassPtr object)</td></tr>

<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g5cf816e784905889b151d236cf8fa0d2"></a><!-- doxytag: member="scf::SCF_QUERY_INTERFACE_SAFE_is_deprecated" ref="g5cf816e784905889b151d236cf8fa0d2" args="(ClassPtr object)" -->
template&lt;class Interface, class ClassPtr&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#g5cf816e784905889b151d236cf8fa0d2">SCF_QUERY_INTERFACE_SAFE_is_deprecated</a> (ClassPtr object)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gb72a7c621912c032409c2147c65a5598">scfCompatibleVersion</a> (<a class="el" href="group__scf.html#ga7cc38364be77246ba6f80b3c98b8c59">scfInterfaceVersion</a> iVersion, <a class="el" href="group__scf.html#ga7cc38364be77246ba6f80b3c98b8c59">scfInterfaceVersion</a> iItfVersion)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This function checks whenever an interface is compatible with given version.  <a href="#gb72a7c621912c032409c2147c65a5598"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#ge034563962e9f68c4310476b40f45884">scfCreateInstance</a> (char const *const ClassID)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Handy function to create an instance of a shared class.  <a href="#ge034563962e9f68c4310476b40f45884"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#gedb60456c96a18d8b92fd0a2f896747c">scfInitialize</a> (int argc, const char *const argv[])</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This function should be called to initialize client SCF library.  <a href="#gedb60456c96a18d8b92fd0a2f896747c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scf.html#ge2da054d4d141e63e22aac6a78e7211a">scfInitialize</a> (<a class="el" href="classcsPathsList.html">csPathsList</a> const *pluginPaths, unsigned int verbose=SCF_VERBOSE_NONE)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This function should be called to initialize client SCF library.  <a href="#ge2da054d4d141e63e22aac6a78e7211a"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface, class ClassPtr&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#g2e8cf383ca5045f2b0c05374ff0107c3">scfQueryInterface</a> (ClassPtr object)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Helper function around <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">iBase::QueryInterface</a>.  <a href="#g2e8cf383ca5045f2b0c05374ff0107c3"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;class Interface, class ClassPtr&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="classcsPtr.html">csPtr</a>&lt; Interface &gt;&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__scf.html#g00cb2faae8bcba56ca1f5cd3a887aa14">scfQueryInterfaceSafe</a> (ClassPtr object)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Helper function around <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">iBase::QueryInterface</a> which also does null-check of object.  <a href="#g00cb2faae8bcba56ca1f5cd3a887aa14"></a><br></td></tr>
</table>
<h3><a class="anchor" name="SCFExamples">Some examples</a></h3><div class="fragment"><pre class="fragment"> <span class="keyword">struct </span>iFoo : <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> {
   <a class="code" href="group__scf.html#g711056cbf220f268640935926c404ba5" title="SCF_INTERFACE can be used to define an interface&amp;#39;s version number; you should...">SCF_INTERFACE</a>(iFoo,0,0,1);
 };
 
 <span class="keyword">struct </span>iBar : <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> {
   <a class="code" href="group__scf.html#g711056cbf220f268640935926c404ba5" title="SCF_INTERFACE can be used to define an interface&amp;#39;s version number; you should...">SCF_INTERFACE</a>(iFoo,0,0,1);
 };
 
 <span class="keyword">class </span>Foo : <span class="keyword">public</span> <a class="code" href="classscfImplementation1.html">scfImplementation1</a>&lt;Foo,iFoo&gt;
 {
 <span class="keyword">public</span>:
   Foo() : scfImplementationType(this) {}
   Foo(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>) : scfImplementationType(0,0) {}
 };
 
 <span class="keyword">class </span>Bar : <span class="keyword">public</span> <a class="code" href="classscfImplementationExt1.html">scfImplementationExt1</a>&lt;Bar,Foo,iBar&gt;
 {
 <span class="keyword">public</span>:
   Bar() : scfImplementationType(0) {}
   Bar(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y) : scfImplementationType(0,x,y) {}
 };
</pre></div> <hr><h2>Define Documentation</h2>
<a class="anchor" name="gcdb1b8ee47910e5b7ea462c354d4ac98"></a><!-- doxytag: member="plugin.h::CS_LOAD_PLUGIN" ref="gcdb1b8ee47910e5b7ea462c354d4ac98" args="(Object, ClassID, Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CS_LOAD_PLUGIN          </td>
          <td>(</td>
          <td class="paramtype">Object,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ClassID,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%">&nbsp;&nbsp;&nbsp;csLoadPlugin&lt;Interface&gt; (Object, ClassID)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000110">Deprecated:</a></b></dt><dd>Compatibility macro. <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__scf.html#gf4a34e36cd27e680cfcf002cca9729c7" title="Tell plugin manager to load a plugin.">csLoadPlugin&lt;Interface&gt;</a> (mgr, ClassID); </dd></dl>
</dd></dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00234">234</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g1de42472494732840be02de385f7999a"></a><!-- doxytag: member="plugin.h::CS_LOAD_PLUGIN_ALWAYS" ref="g1de42472494732840be02de385f7999a" args="(Object, ClassID)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CS_LOAD_PLUGIN_ALWAYS          </td>
          <td>(</td>
          <td class="paramtype">Object,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ClassID&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%">&nbsp;&nbsp;&nbsp;csLoadPluginAlways (Object, ClassID)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000111">Deprecated:</a></b></dt><dd>Compatibility macro. <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__scf.html#g080cc89b6f142d13e81bd3b1e5da3cae" title="Same as csLoadPlugin() but does not bother asking for a interface.">csLoadPluginAlways</a> (mgr, ClassID); </dd></dl>
</dd></dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00252">252</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g453f1f8878aafb523944c206beb05873"></a><!-- doxytag: member="plugin.h::CS_QUERY_PLUGIN_CLASS" ref="g453f1f8878aafb523944c206beb05873" args="(Object, ClassID, Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CS_QUERY_PLUGIN_CLASS          </td>
          <td>(</td>
          <td class="paramtype">Object,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ClassID,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%">&nbsp;&nbsp;&nbsp;csQueryPluginClass&lt;Interface&gt; (Object, ClassID)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Compatbility macro. 
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__scf.html#g4c6e52d0906212c2ca5b49fb507afb05" title="Find a plugin by its class ID.">csQueryPluginClass&lt;Interface&gt;</a> (Object, ClassID); </dd></dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00139">139</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g8b371049a76e7d2c8a2fab1cb1f189eb"></a><!-- doxytag: member="scf.h::SCF_CONSTRUCT_EMBEDDED_IBASE" ref="g8b371049a76e7d2c8a2fab1cb1f189eb" args="(Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_CONSTRUCT_EMBEDDED_IBASE          </td>
          <td>(</td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment">Interface.scfParent = <span class="keyword">this</span>;                                             \
  <a class="code" href="classcsRefTrackerAccess.html#a8c0a506258420512d398cad33afd807">csRefTrackerAccess::AddAlias</a> (&amp;Interface, <span class="keyword">this</span>);
</pre></div>The SCF_CONSTRUCT_EMBEDDED_IBASE macro should be invoked inside the constructor of a class that has an embedded interface (not inside the constructor of the embedded interface). 
<p>
The macro will initialize the pointer to the parent object (to the object this one is embedded into). The argument to this macro is the name of the parent's instance variable by which the embedded object is known (typically something like `scfiFooBar'). 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00145">145</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g1a458452568fb70762717a993d85bb38"></a><!-- doxytag: member="scf.h::SCF_CONSTRUCT_IBASE" ref="g1a458452568fb70762717a993d85bb38" args="(Parent)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_CONSTRUCT_IBASE          </td>
          <td>(</td>
          <td class="paramtype">Parent&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="classcsRefTrackerAccess.html#ac03b9bbf01c4a33784e052c3d78d458">csRefTrackerAccess::TrackConstruction</a> (<span class="keyword">this</span>);                           \
  <a class="code" href="classcsRefTrackerAccess.html#5884fac0b7032555ba0b52250053ce29">csRefTrackerAccess::SetDescription</a> (<span class="keyword">this</span>, <a class="code" href="group__scf.html#gb3fb7f6a541c017fbcd04fcbf75288ae">CS_TYPENAME</a>(*<span class="keyword">this</span>));        \
  scfRefCount = 1;                                                      \
  scfWeakRefOwners = 0;                                                 \
  scfParent = Parent; <span class="keywordflow">if</span> (scfParent) scfParent-&gt;IncRef();               \
  <a class="code" href="group__scf.html#g7da6359c3ea79d8ab254f78d0b29af71">SCF_INIT_TRACKER_ALIASES</a>
</pre></div>The SCF_CONSTRUCT_IBASE macro should be invoked inside the constructor of a class (not inside an embedded interface). 
<p>
Normally each constructor should accept an iBase* parameter (that is passed by scfCreateInstance function) which should be passed to this macro. The macro will zero the reference count and initialize the pointer to the parent object. If the object is unparented (a common case), it is okay to use null as the argument to this macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00128">128</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g5bdabeb185cb2a676ce5e223aab4ecd2"></a><!-- doxytag: member="scf_interface.h::SCF_CONSTRUCT_VERSION" ref="g5bdabeb185cb2a676ce5e223aab4ecd2" args="(Major, Minor, Micro)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_CONSTRUCT_VERSION          </td>
          <td>(</td>
          <td class="paramtype">Major,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Minor,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Micro&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%">&nbsp;&nbsp;&nbsp;((Major &lt;&lt; 24) | (Minor &lt;&lt; 16) | Micro)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Use this macro to construct interface version numbers. 
<p>

<p>Definition at line <a class="el" href="scf__interface_8h-source.html#l00082">82</a> of file <a class="el" href="scf__interface_8h-source.html">scf_interface.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g5b0b8a41841a8901731fdd009b8727eb"></a><!-- doxytag: member="scf.h::SCF_CREATE_INSTANCE" ref="g5b0b8a41841a8901731fdd009b8727eb" args="(ClassID, Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_CREATE_INSTANCE          </td>
          <td>(</td>
          <td class="paramtype">ClassID,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%">&nbsp;&nbsp;&nbsp;SCF_CREATE_INSTANCE_is_deprecated&lt;Interface&gt; (ClassID)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000067">Deprecated:</a></b></dt><dd>Compatibility macro for scfCreateInstance function </dd></dl>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00846">846</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g1c5273660c64350850cb55a4a04f7aae"></a><!-- doxytag: member="scf.h::SCF_DECLARE_EMBEDDED_IBASE" ref="g1c5273660c64350850cb55a4a04f7aae" args="(OuterClass)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_DECLARE_EMBEDDED_IBASE          </td>
          <td>(</td>
          <td class="paramtype">OuterClass&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">public</span>:                                                                 \
  OuterClass *scfParent;        <span class="comment">/* The parent object */</span>                 \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> IncRef ();                                               \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> DecRef ();                                               \
  <span class="keyword">virtual</span> <span class="keywordtype">int</span> GetRefCount ();                                           \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddRefOwner (<span class="keywordtype">void</span>** ref_owner);                          \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> RemoveRefOwner (<span class="keywordtype">void</span>** ref_owner);                       \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> *QueryInterface (<a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a> iInterfaceID, <span class="keywordtype">int</span> iVersion)
</pre></div>SCF_DECLARE_EMBEDDED_IBASE is used to declare the methods of <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> inside an embedded class that is exposed via QueryInterface. 
<p>
.. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00109">109</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g3a58a1f2306d454390e234d6361ddffe"></a><!-- doxytag: member="scf.h::SCF_DECLARE_IBASE" ref="g3a58a1f2306d454390e234d6361ddffe" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_DECLARE_IBASE          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">int</span> scfRefCount;                <span class="comment">/* Reference counter */</span>                 \
  <a class="code" href="classcsArray.html" title="A templated array class.">csArray&lt;void**&gt;</a>* scfWeakRefOwners;                                    \
  <span class="keywordtype">void</span> scfRemoveRefOwners ();                                           \
  <a class="code" href="group__scf.html#g1c5273660c64350850cb55a4a04f7aae" title="SCF_DECLARE_EMBEDDED_IBASE is used to declare the methods of iBase inside an embedded...">SCF_DECLARE_EMBEDDED_IBASE</a> (<a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>)
</pre></div>This macro should be embedded into any SCF-capable class definition to declare the minimal functionality required by <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> interface. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00099">99</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g28edb7c87e3f5e9558539e156dee8259"></a><!-- doxytag: member="scf.h::SCF_DECLARE_IBASE_EXT" ref="g28edb7c87e3f5e9558539e156dee8259" args="(ParentClass)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_DECLARE_IBASE_EXT          </td>
          <td>(</td>
          <td class="paramtype">ParentClass&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">typedef</span> ParentClass __scf_superclass;                                   \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> IncRef ();                                               \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> DecRef ();                                               \
  <span class="keyword">virtual</span> <span class="keywordtype">int</span> GetRefCount ();                                           \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddRefOwner (<span class="keywordtype">void</span>** ref_owner);                          \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> RemoveRefOwner (<span class="keywordtype">void</span>** ref_owner);                       \
  <span class="keyword">virtual</span> <span class="keywordtype">void</span> *QueryInterface (<a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a> iInterfaceID, <span class="keywordtype">int</span> iVersion)
</pre></div>The following macro is used in "expansion SCF classes". 
<p>
An expansion class is a class that extends the functionality of another SCF class. For example, suppose a class TheWolf that implements the iWolf interface. Separately it is a useful class per se, but if you want to implement an additional class TheDog that is a subclass of TheWolf and which implements an additional interface iDog in theory you should just override the QueryInterface method and return the corresponding pointer when asked. The following macro makes such overrides simpler to write. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00430">430</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g2c6ba99ad6c27369aaf352a41a012223"></a><!-- doxytag: member="scf.h::SCF_DEFINE_FACTORY_FUNC_REGISTRATION" ref="g2c6ba99ad6c27369aaf352a41a012223" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_DEFINE_FACTORY_FUNC_REGISTRATION          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="cssysdef_8h.html#e2ce39bfd93ebeb3498d7269baa9a820">CS_EXPORTED_FUNCTION</a> <a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>* <a class="code" href="cssysdef_8h.html#98a357da90de38c5595450fd4e32a9fc">CS_EXPORTED_NAME</a>(Class,_Create)(<a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>*);    \
  <span class="keyword">class </span>Class##_StaticInit                                              \
  {                                                                     \
  <span class="keyword">public</span>:                                                               \
    Class##_StaticInit()                                                \
    {                                                                   \
      <a class="code" href="group__scf.html#gdf22686621a246ba1de548575f3fc029" title="Register a static class.">scfRegisterStaticFactoryFunc</a> (<a class="code" href="cssysdef_8h.html#98a357da90de38c5595450fd4e32a9fc">CS_EXPORTED_NAME</a>(Class,_Create),    \
        #Class);                                                        \
    }                                                                   \
  };
</pre></div>Define the C++ class needed to register an SCF class, but don't do any automatic registration. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00642">642</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gf43af0ec1c503ba57f60766aa3c88e5c"></a><!-- doxytag: member="scf.h::SCF_DESTRUCT_EMBEDDED_IBASE" ref="gf43af0ec1c503ba57f60766aa3c88e5c" args="(Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_DESTRUCT_EMBEDDED_IBASE          </td>
          <td>(</td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="classcsRefTrackerAccess.html#26ffde1b1f7e687f8618feddd43c6759">csRefTrackerAccess::RemoveAlias</a> (&amp;Interface, <span class="keyword">this</span>);                     \
  Interface.scfParent = 0;
</pre></div>The SCF_DESTRUCT_EMBEDDED_IBASE macro should be invoked inside the destructor of a class that has an embedded interface (not inside the destructor of the embedded interface). 
<p>
It reverses the initialization performed by the <a class="el" href="group__scf.html#g8b371049a76e7d2c8a2fab1cb1f189eb" title="The SCF_CONSTRUCT_EMBEDDED_IBASE macro should be invoked inside the constructor of...">SCF_CONSTRUCT_EMBEDDED_IBASE()</a> macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00164">164</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g877921891b0406c28d11a7e378be36f1"></a><!-- doxytag: member="scf.h::SCF_DESTRUCT_IBASE" ref="g877921891b0406c28d11a7e378be36f1" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_DESTRUCT_IBASE          </td>
          <td>(</td>
&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="classcsRefTrackerAccess.html#bd48ede8419cbc9b3c685b6f0783128b">csRefTrackerAccess::TrackDestruction</a> (<span class="keyword">this</span>, scfRefCount);               \
  scfRemoveRefOwners ();
</pre></div>The SCF_DESTRUCT_IBASE macro should be invoked inside the destructor of a class (not inside an embedded interface). 
<p>
It reverses the initialization performed by the <a class="el" href="group__scf.html#g1a458452568fb70762717a993d85bb38" title="The SCF_CONSTRUCT_IBASE macro should be invoked inside the constructor of a class...">SCF_CONSTRUCT_IBASE()</a> macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00154">154</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gd8ce85493f112b4cb7608dccddcbfab9"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_EMBEDDED_IBASE" ref="gd8ce85493f112b4cb7608dccddcbfab9" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_EMBEDDED_IBASE          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__scf.html#gc94d6b350ecfcac7ed08aaaadf04fb56" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF() macro implements the IncRef() method for...">SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF</a>(Class)                              \
  <a class="code" href="group__scf.html#gbd1ed82014e91ff4e6b0f3d86716e256" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF() macro implements the DecRef() method for...">SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF</a>(Class)                            \
  <a class="code" href="group__scf.html#g80f42c8c1fafd205917d3b3b7b831ec6" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT() macro implements the GetRefCount()...">SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT</a>(Class)                       \
  <a class="code" href="group__scf.html#ge4a9107b28eabdd14ce0172fe1820781" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER() macro implements the AddRefOwner() and...">SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER</a>(Class)                          \
  <a class="code" href="group__scf.html#g8dd36ea504eab347795fa91c98225269" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY() macro implements the opening boilerplate...">SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY</a>(Class)
</pre></div>SCF_IMPLEMENT_EMBEDDED_IBASE should be used to implement embedded interfaces derived from <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>. 
<p>
It differs from SCF_IMPLEMENT_IBASE because embedded interface don't have reference counts themselves, but instead use the reference count of their parent object. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00378">378</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gbd1ed82014e91ff4e6b0f3d86716e256"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF" ref="gbd1ed82014e91ff4e6b0f3d86716e256" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::DecRef ()                                                   \
{                                                                       \
  <a class="code" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0" title="Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want...">SCF_TRACE</a> ((<span class="stringliteral">"  (%s *)%p-&gt;DecRef (%d)\n"</span>, #Class, <span class="keyword">this</span>,                \
              scfParent-&gt;GetRefCount ()-1));                            \
  scfParent-&gt;DecRef ();                                                 \
}
</pre></div>The <a class="el" href="group__scf.html#gbd1ed82014e91ff4e6b0f3d86716e256" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF() macro implements the DecRef() method for...">SCF_IMPLEMENT_EMBEDDED_IBASE_DECREF()</a> macro implements the DecRef() method for an embedded class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#gd8ce85493f112b4cb7608dccddcbfab9" title="SCF_IMPLEMENT_EMBEDDED_IBASE should be used to implement embedded interfaces derived...">SCF_IMPLEMENT_EMBEDDED_IBASE()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00318">318</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="ga3cc3f0a892c0f3296fa15b8e297d92f"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_EMBEDDED_IBASE_END" ref="ga3cc3f0a892c0f3296fa15b8e297d92f" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_EMBEDDED_IBASE_END&nbsp;&nbsp;&nbsp;SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
The SCF_IMPLEMENT_EMBEDDED_IBASE_END macro is used to finish an SCF_IMPLEMENT_EMBEDDED_IBASE definition. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00389">389</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g80f42c8c1fafd205917d3b3b7b831ec6"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT" ref="g80f42c8c1fafd205917d3b3b7b831ec6" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">int</span> Class::GetRefCount ()                                               \
{                                                                       \
  <span class="keywordflow">return</span> scfParent-&gt;GetRefCount ();                                     \
}
</pre></div>The <a class="el" href="group__scf.html#g80f42c8c1fafd205917d3b3b7b831ec6" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT() macro implements the GetRefCount()...">SCF_IMPLEMENT_EMBEDDED_IBASE_GETREFCOUNT()</a> macro implements the GetRefCount() method for an embedded class in a C++ source module. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00330">330</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gc94d6b350ecfcac7ed08aaaadf04fb56"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF" ref="gc94d6b350ecfcac7ed08aaaadf04fb56" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::IncRef ()                                                   \
{                                                                       \
  <a class="code" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0" title="Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want...">SCF_TRACE</a> ((<span class="stringliteral">"  (%s *)%p-&gt;IncRef (%d)\n"</span>, #Class, <span class="keyword">this</span>,                \
    scfParent-&gt;GetRefCount () + 1));                                    \
  scfParent-&gt;IncRef ();                                                 \
}
</pre></div>The <a class="el" href="group__scf.html#gc94d6b350ecfcac7ed08aaaadf04fb56" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF() macro implements the IncRef() method for...">SCF_IMPLEMENT_EMBEDDED_IBASE_INCREF()</a> macro implements the IncRef() method for an embedded class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#gd8ce85493f112b4cb7608dccddcbfab9" title="SCF_IMPLEMENT_EMBEDDED_IBASE should be used to implement embedded interfaces derived...">SCF_IMPLEMENT_EMBEDDED_IBASE()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00304">304</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g8dd36ea504eab347795fa91c98225269"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY" ref="g8dd36ea504eab347795fa91c98225269" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> *Class::QueryInterface (<a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a> iInterfaceID, <span class="keywordtype">int</span> iVersion) \
{                                                                       \
  <a class="code" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0" title="Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want...">SCF_TRACE</a> ((<span class="stringliteral">"  (%s *)%p-&gt;QueryInterface (%lu, %08X)\n"</span>,               \
    #Class, <span class="keyword">this</span>, iInterfaceID, iVersion));
</pre></div>The <a class="el" href="group__scf.html#g8dd36ea504eab347795fa91c98225269" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY() macro implements the opening boilerplate...">SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY()</a> macro implements the opening boilerplate for the QueryInterface() method for an embedded class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#gd8ce85493f112b4cb7608dccddcbfab9" title="SCF_IMPLEMENT_EMBEDDED_IBASE should be used to implement embedded interfaces derived...">SCF_IMPLEMENT_EMBEDDED_IBASE()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00356">356</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g636b87ffdf233dfb1241c5cb690dd18c"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END" ref="g636b87ffdf233dfb1241c5cb690dd18c" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">return</span> scfParent-&gt;QueryInterface (iInterfaceID, iVersion);              \
}
</pre></div>The SCF_IMPLEMENT_EMBEDDED_IBASE_QUERY_END macro implements the closing boilerplate for the QueryInterface() method for a class in an embedded C++ source module. 
<p>
Typically, this macro is automatically employed by the SCF_IMPLEMENT_EMBEDDED_IBASE_END convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00368">368</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="ge4a9107b28eabdd14ce0172fe1820781"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER" ref="ge4a9107b28eabdd14ce0172fe1820781" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::AddRefOwner (<span class="keywordtype">void</span>** ref_owner)                              \
{                                                                       \
  scfParent-&gt;AddRefOwner (ref_owner);                                   \
}                                                                       \
<span class="keywordtype">void</span> Class::RemoveRefOwner (<span class="keywordtype">void</span>** ref_owner)                           \
{                                                                       \
  scfParent-&gt;RemoveRefOwner (ref_owner);                                \
}
</pre></div>The <a class="el" href="group__scf.html#ge4a9107b28eabdd14ce0172fe1820781" title="The SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER() macro implements the AddRefOwner() and...">SCF_IMPLEMENT_EMBEDDED_IBASE_REFOWNER()</a> macro implements the AddRefOwner() and RemoveRefOwner() for a weak reference. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00340">340</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g373349b6fc91662b31ffaf102ef908c2"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_FACTORY" ref="g373349b6fc91662b31ffaf102ef908c2" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_FACTORY          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__scf.html#gb2d4f983b73223294969161c65872274" title="The SCF_IMPLEMENT_FACTORY_INIT macro defines initialization code for a plugin module...">SCF_IMPLEMENT_FACTORY_INIT</a>(Class)                                       \
  <a class="code" href="group__scf.html#gb0ba5d1d55dc991a49fb67cbfb24166b" title="The SCF_IMPLEMENT_FACTORY_FINIS macro defines finalization code for a plugin module...">SCF_IMPLEMENT_FACTORY_FINIS</a>(Class)                                    \
  <a class="code" href="group__scf.html#g2ff16a54724c1f00d7985bd971453418" title="The SCF_IMPLEMENT_FACTORY_CREATE macro is used to define a factory for one of exported...">SCF_IMPLEMENT_FACTORY_CREATE</a>(Class)
</pre></div>The SCF_IMPLEMENT_FACTORY macro is used to define a factory for one of exported classes. 
<p>
You can define the function manually, of course, if the constructor for your class has some specific constructor arguments (that is, more than one iBase* argument). 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00597">597</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g2ff16a54724c1f00d7985bd971453418"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_FACTORY_CREATE" ref="g2ff16a54724c1f00d7985bd971453418" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_FACTORY_CREATE          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="cssysdef_8h.html#e2ce39bfd93ebeb3498d7269baa9a820">CS_EXPORTED_FUNCTION</a>                                                    \
<a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>* <a class="code" href="cssysdef_8h.html#98a357da90de38c5595450fd4e32a9fc">CS_EXPORTED_NAME</a>(Class,_Create)(<a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> *iParent)                  \
{                                                                       \
  <a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a> *ret = <span class="keyword">new</span> Class (iParent);                                     \
  <a class="code" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0" title="Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want...">SCF_TRACE</a> ((<span class="stringliteral">"  %p = new %s ()\n"</span>, ret, #Class));                      \
  <span class="keywordflow">return</span> ret;                                                           \
}
</pre></div>The SCF_IMPLEMENT_FACTORY_CREATE macro is used to define a factory for one of exported classes. 
<p>
You can define the function manually, of course, if the constructor for your class has some specific constructor arguments (that is, more than one iBase* argument). 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00582">582</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gb0ba5d1d55dc991a49fb67cbfb24166b"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_FACTORY_FINIS" ref="gb0ba5d1d55dc991a49fb67cbfb24166b" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_FACTORY_FINIS          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="cssysdef_8h.html#e2ce39bfd93ebeb3498d7269baa9a820">CS_EXPORTED_FUNCTION</a>                                                    \
<span class="keywordtype">void</span> <a class="code" href="cssysdef_8h.html#98a357da90de38c5595450fd4e32a9fc">CS_EXPORTED_NAME</a>(Class,_scfFinalize)()                             \
{                                                                       \
<a class="code" href="cssysdef_8h.html#9f98b09fc5f5c5e6bcb2cabe2ac18075" title="Invoke the function that will call all destruction functions.">CS_STATIC_VARIABLE_CLEANUP</a>                                              \
}
</pre></div>The SCF_IMPLEMENT_FACTORY_FINIS macro defines finalization code for a plugin module. 
<p>
As with SCF_IMPLEMENT_FACTORY_INIT, only one instance of this function will be invoked to finalize the module. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00569">569</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gb2d4f983b73223294969161c65872274"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_FACTORY_INIT" ref="gb2d4f983b73223294969161c65872274" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_FACTORY_INIT          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> Class ## _scfUnitInitialize(<a class="code" href="structiSCF.html" title="iSCF is the interface that allows using SCF functions from shared classes.">iSCF</a>* SCF)               \
{ <a class="code" href="structiSCF.html#64db1d2d25a1eca49ddefe6922c41e8e" title="This is the global instance of iSCF.">iSCF::SCF</a> = SCF; }                                                    \
<a class="code" href="cssysdef_8h.html#e2ce39bfd93ebeb3498d7269baa9a820">CS_EXPORTED_FUNCTION</a>                                                    \
<span class="keywordtype">void</span> <a class="code" href="cssysdef_8h.html#98a357da90de38c5595450fd4e32a9fc">CS_EXPORTED_NAME</a>(Class,_scfInitialize)(<a class="code" href="structiSCF.html" title="iSCF is the interface that allows using SCF functions from shared classes.">iSCF</a>* SCF)                  \
{ Class ## _scfUnitInitialize(SCF); }
</pre></div>The SCF_IMPLEMENT_FACTORY_INIT macro defines initialization code for a plugin module. 
<p>
This function should set the plugin-global <a class="el" href="structiSCF.html#64db1d2d25a1eca49ddefe6922c41e8e" title="This is the global instance of iSCF.">iSCF::SCF</a> variable, and otherwise initialize the plugin module. Although a version of this function will be created for each SCF factory exported by the plugin, SCF will call one, and only one, to perform the plugin initialization. The choice of which function will be invoked to initialize the plugin is an SCF implementation detail. You should not attempt to predict which class_scfInitialize() function will be used, nor should use try to sway SCF's choice. Implementation note: There are some rare instances where a particularly picky (and probably buggy) compiler does not allow C++ expressions within a function declared `extern "C"'. For this reason, the <a class="el" href="structiSCF.html#64db1d2d25a1eca49ddefe6922c41e8e" title="This is the global instance of iSCF.">iSCF::SCF</a> variable is instead initialized in the Class_scfUnitInitialize() function which is not qualified as `extern "C"'. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00556">556</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gbcda0c42b7c3a7b12ecdb407bb0ba3d8"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE" ref="gbcda0c42b7c3a7b12ecdb407bb0ba3d8" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__scf.html#g8a1213fd6984424826788aaee0a3b398" title="The SCF_IMPLEMENT_IBASE_INCREF() macro implements the IncRef() method for a class...">SCF_IMPLEMENT_IBASE_INCREF</a>(Class)                                       \
  <a class="code" href="group__scf.html#g176199e7058f9f662e4ad178e3e2c9a9" title="The SCF_IMPLEMENT_IBASE_DECREF() macro implements the DecRef() method for a class...">SCF_IMPLEMENT_IBASE_DECREF</a>(Class)                                     \
  <a class="code" href="group__scf.html#g9e7383896428a0a12c4e4a46362b4e9e" title="The SCF_IMPLEMENT_IBASE_GETREFCOUNT() macro implements GetRefCount() for a class...">SCF_IMPLEMENT_IBASE_GETREFCOUNT</a>(Class)                                \
  <a class="code" href="group__scf.html#ga14ac21f00cf6a9b7ef2f5743a81f2cf" title="The SCF_IMPLEMENT_IBASE_REFOWNER() macro implements the AddRefOwner() and RemoveRefOwner()...">SCF_IMPLEMENT_IBASE_REFOWNER</a>(Class)                                   \
  <a class="code" href="group__scf.html#gf6af2f711113e622becbcb69cbdd1fbb" title="The SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS() macro implements the scfRemoveRefOwners()...">SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS</a>(Class)                          \
  <a class="code" href="group__scf.html#gce4cdb30da337f6913d4509343077557" title="The SCF_IMPLEMENT_IBASE_QUERY() macro implements the opening boilerplate for the...">SCF_IMPLEMENT_IBASE_QUERY</a>(Class)
</pre></div>The <a class="el" href="group__scf.html#gbcda0c42b7c3a7b12ecdb407bb0ba3d8" title="The SCF_IMPLEMENT_IBASE() macro should be used within the C++ source module that...">SCF_IMPLEMENT_IBASE()</a> macro should be used within the C++ source module that implements a interface derived from <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>. 
<p>
Of course, you can still implement those methods manually, if you desire ... 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00283">283</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g176199e7058f9f662e4ad178e3e2c9a9"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_DECREF" ref="g176199e7058f9f662e4ad178e3e2c9a9" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_DECREF          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::DecRef ()                                                   \
{                                                                       \
  <a class="code" href="classcsRefTrackerAccess.html#932e684254796d9af091a774d28d7ba2">csRefTrackerAccess::TrackDecRef</a> (<span class="keyword">this</span>, scfRefCount);                  \
  <span class="keywordflow">if</span> (scfRefCount == 1)                                                 \
  {                                                                     \
    <a class="code" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0" title="Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want...">SCF_TRACE</a> ((<span class="stringliteral">" delete (%s *)%p\n"</span>, #Class, <span class="keyword">this</span>));                   \
    scfRemoveRefOwners ();                                              \
    <span class="keywordflow">if</span> (scfParent)                                                      \
      scfParent-&gt;DecRef ();                                             \
    <span class="keyword">delete</span> <span class="keyword">this</span>;                                                        \
    <span class="keywordflow">return</span>;                                                             \
  }                                                                     \
  scfRefCount--;                                                        \
}
</pre></div>The <a class="el" href="group__scf.html#g176199e7058f9f662e4ad178e3e2c9a9" title="The SCF_IMPLEMENT_IBASE_DECREF() macro implements the DecRef() method for a class...">SCF_IMPLEMENT_IBASE_DECREF()</a> macro implements the DecRef() method for a class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#gbcda0c42b7c3a7b12ecdb407bb0ba3d8" title="The SCF_IMPLEMENT_IBASE() macro should be used within the C++ source module that...">SCF_IMPLEMENT_IBASE()</a> convenience macro. <p>
A note about the implementation: We do the "if" before the "scRefCount--" to make sure that calling Inc/DecRef doesn't result in a 2nd delete 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00189">189</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g17899d525bbb5d9bdba293c5f028eb91"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_END" ref="g17899d525bbb5d9bdba293c5f028eb91" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_END&nbsp;&nbsp;&nbsp;SCF_IMPLEMENT_IBASE_QUERY_END          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
The SCF_IMPLEMENT_IBASE_END macro is used to finish an SCF_IMPLEMENT_IBASE definition. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00295">295</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g15417d8a30b7f466a2eb186889aab0a1"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_EXT" ref="g15417d8a30b7f466a2eb186889aab0a1" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_EXT          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__scf.html#g8439bf789cd1e09faae47d3c591f6910" title="The SCF_IMPLEMENT_IBASE_EXT_INCREF() macro implements the IncRef() method for a class...">SCF_IMPLEMENT_IBASE_EXT_INCREF</a>(Class)                                   \
  <a class="code" href="group__scf.html#g7c67d5dd0c42e9014b94135ae2ab58e7" title="The SCF_IMPLEMENT_IBASE_EXT_DECREF() macro implements the DecRef() method for a class...">SCF_IMPLEMENT_IBASE_EXT_DECREF</a>(Class)                                 \
  <a class="code" href="group__scf.html#g2370479942b59428b84236b1e6bad32f" title="The SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT() macro implements the GetRefCount() method...">SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT</a>(Class)                            \
  <a class="code" href="group__scf.html#gc364123d75a3bfd0efd48db3ae5cee77" title="The SCF_IMPLEMENT_IBASE_EXT_REFOWNER() macro implements the AddRefOwner() and RemoveRefOwner()...">SCF_IMPLEMENT_IBASE_EXT_REFOWNER</a>(Class)                               \
  <a class="code" href="group__scf.html#g34c31f88ff4057701027fe3e2520b3fd" title="The SCF_IMPLEMENT_IBASE_EXT_QUERY() macro implements the opening boilerplate for...">SCF_IMPLEMENT_IBASE_EXT_QUERY</a>(Class)
</pre></div>This macro implements same functionality as SCF_IMPLEMENT_IBASE except that it should be used for expansion SCF classes. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00513">513</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g7c67d5dd0c42e9014b94135ae2ab58e7"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_EXT_DECREF" ref="g7c67d5dd0c42e9014b94135ae2ab58e7" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_EXT_DECREF          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::DecRef ()                                                   \
{                                                                       \
  __scf_superclass::DecRef ();                                          \
}
</pre></div>The <a class="el" href="group__scf.html#g7c67d5dd0c42e9014b94135ae2ab58e7" title="The SCF_IMPLEMENT_IBASE_EXT_DECREF() macro implements the DecRef() method for a class...">SCF_IMPLEMENT_IBASE_EXT_DECREF()</a> macro implements the DecRef() method for a class extending another SCF class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#g15417d8a30b7f466a2eb186889aab0a1" title="This macro implements same functionality as SCF_IMPLEMENT_IBASE except that it should...">SCF_IMPLEMENT_IBASE_EXT()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00457">457</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gb35b13fd96454cd6ff8b70d05be20010"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_EXT_END" ref="gb35b13fd96454cd6ff8b70d05be20010" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_EXT_END&nbsp;&nbsp;&nbsp;SCF_IMPLEMENT_IBASE_EXT_QUERY_END          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
This macro implements same functionality as SCF_IMPLEMENT_IBASE_END except that it is used for expansion SCF classes. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00524">524</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g2370479942b59428b84236b1e6bad32f"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT" ref="g2370479942b59428b84236b1e6bad32f" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">int</span> Class::GetRefCount ()                                               \
{                                                                       \
  <span class="keywordflow">return</span> __scf_superclass::GetRefCount ();                              \
}
</pre></div>The <a class="el" href="group__scf.html#g2370479942b59428b84236b1e6bad32f" title="The SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT() macro implements the GetRefCount() method...">SCF_IMPLEMENT_IBASE_EXT_GETREFCOUNT()</a> macro implements the GetRefCount() method for a class extending another SCF class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#g15417d8a30b7f466a2eb186889aab0a1" title="This macro implements same functionality as SCF_IMPLEMENT_IBASE except that it should...">SCF_IMPLEMENT_IBASE_EXT()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00469">469</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g8439bf789cd1e09faae47d3c591f6910"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_EXT_INCREF" ref="g8439bf789cd1e09faae47d3c591f6910" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_EXT_INCREF          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::IncRef ()                                                   \
{                                                                       \
  __scf_superclass::IncRef ();                                          \
}
</pre></div>The <a class="el" href="group__scf.html#g8439bf789cd1e09faae47d3c591f6910" title="The SCF_IMPLEMENT_IBASE_EXT_INCREF() macro implements the IncRef() method for a class...">SCF_IMPLEMENT_IBASE_EXT_INCREF()</a> macro implements the IncRef() method for a class extending another SCF class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#g15417d8a30b7f466a2eb186889aab0a1" title="This macro implements same functionality as SCF_IMPLEMENT_IBASE except that it should...">SCF_IMPLEMENT_IBASE_EXT()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00445">445</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g34c31f88ff4057701027fe3e2520b3fd"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_EXT_QUERY" ref="g34c31f88ff4057701027fe3e2520b3fd" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_EXT_QUERY          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> *Class::QueryInterface (<a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a> iInterfaceID, <span class="keywordtype">int</span> iVersion) \
{
</pre></div>The <a class="el" href="group__scf.html#g34c31f88ff4057701027fe3e2520b3fd" title="The SCF_IMPLEMENT_IBASE_EXT_QUERY() macro implements the opening boilerplate for...">SCF_IMPLEMENT_IBASE_EXT_QUERY()</a> macro implements the opening boilerplate for the QueryInterface() method for a class extending another SCF class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#g15417d8a30b7f466a2eb186889aab0a1" title="This macro implements same functionality as SCF_IMPLEMENT_IBASE except that it should...">SCF_IMPLEMENT_IBASE_EXT()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00495">495</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g70f51e8bc495a9f00382f5be26ffac6c"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_EXT_QUERY_END" ref="g70f51e8bc495a9f00382f5be26ffac6c" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_EXT_QUERY_END          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">return</span> __scf_superclass::QueryInterface (iInterfaceID, iVersion);       \
}
</pre></div>The SCF_IMPLEMENT_IBASE_EXT_QUERY_END macro implements the closing boilerplate for the QueryInterface() method for a class extending another SCF class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the SCF_IMPLEMENT_IBASE_EXT_END convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00505">505</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gc364123d75a3bfd0efd48db3ae5cee77"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_EXT_REFOWNER" ref="gc364123d75a3bfd0efd48db3ae5cee77" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_EXT_REFOWNER          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::AddRefOwner (<span class="keywordtype">void</span>** ref_owner)                              \
{                                                                       \
  __scf_superclass::AddRefOwner (ref_owner);                            \
}                                                                       \
<span class="keywordtype">void</span> Class::RemoveRefOwner (<span class="keywordtype">void</span>** ref_owner)                           \
{                                                                       \
  __scf_superclass::RemoveRefOwner (ref_owner);                         \
}
</pre></div>The <a class="el" href="group__scf.html#gc364123d75a3bfd0efd48db3ae5cee77" title="The SCF_IMPLEMENT_IBASE_EXT_REFOWNER() macro implements the AddRefOwner() and RemoveRefOwner()...">SCF_IMPLEMENT_IBASE_EXT_REFOWNER()</a> macro implements the AddRefOwner() and RemoveRefOwner() for a weak reference. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00479">479</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g9e7383896428a0a12c4e4a46362b4e9e"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_GETREFCOUNT" ref="g9e7383896428a0a12c4e4a46362b4e9e" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_GETREFCOUNT          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">int</span> Class::GetRefCount ()                                               \
{                                                                       \
  <span class="keywordflow">return</span> scfRefCount;                                                   \
}
</pre></div>The <a class="el" href="group__scf.html#g9e7383896428a0a12c4e4a46362b4e9e" title="The SCF_IMPLEMENT_IBASE_GETREFCOUNT() macro implements GetRefCount() for a class...">SCF_IMPLEMENT_IBASE_GETREFCOUNT()</a> macro implements GetRefCount() for a class in a C++ source module. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00249">249</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g8a1213fd6984424826788aaee0a3b398"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_INCREF" ref="g8a1213fd6984424826788aaee0a3b398" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_INCREF          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::IncRef ()                                                   \
{                                                                       \
  <a class="code" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0" title="Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want...">SCF_TRACE</a> ((<span class="stringliteral">"  (%s *)%p-&gt;IncRef (%d)\n"</span>, #Class, <span class="keyword">this</span>, scfRefCount + 1));\
  <a class="code" href="classcsRefTrackerAccess.html#84e019c54997fdc84e441af1e68b209e">csRefTrackerAccess::TrackIncRef</a> (<span class="keyword">this</span>, scfRefCount);                  \
  scfRefCount++;                                                        \
}
</pre></div>The <a class="el" href="group__scf.html#g8a1213fd6984424826788aaee0a3b398" title="The SCF_IMPLEMENT_IBASE_INCREF() macro implements the IncRef() method for a class...">SCF_IMPLEMENT_IBASE_INCREF()</a> macro implements the IncRef() method for a class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#gbcda0c42b7c3a7b12ecdb407bb0ba3d8" title="The SCF_IMPLEMENT_IBASE() macro should be used within the C++ source module that...">SCF_IMPLEMENT_IBASE()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00173">173</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gce4cdb30da337f6913d4509343077557"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_QUERY" ref="gce4cdb30da337f6913d4509343077557" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_QUERY          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> *Class::QueryInterface (<a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a> iInterfaceID, <span class="keywordtype">int</span> iVersion) \
{                                                                       \
  <a class="code" href="group__scf.html#ga06c1028fa2d312a312a06636efa56a0" title="Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want...">SCF_TRACE</a> ((<span class="stringliteral">"  (%s *)%p-&gt;QueryInterface (%lu, %08X)\n"</span>,               \
    #Class, <span class="keyword">this</span>, iInterfaceID, iVersion));
</pre></div>The <a class="el" href="group__scf.html#gce4cdb30da337f6913d4509343077557" title="The SCF_IMPLEMENT_IBASE_QUERY() macro implements the opening boilerplate for the...">SCF_IMPLEMENT_IBASE_QUERY()</a> macro implements the opening boilerplate for the QueryInterface() method for a class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#gbcda0c42b7c3a7b12ecdb407bb0ba3d8" title="The SCF_IMPLEMENT_IBASE() macro should be used within the C++ source module that...">SCF_IMPLEMENT_IBASE()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00261">261</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g87b3a81a37585388f074c48328ab8738"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_QUERY_END" ref="g87b3a81a37585388f074c48328ab8738" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_QUERY_END          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">return</span> scfParent ?                                                      \
    scfParent-&gt;QueryInterface (iInterfaceID, iVersion) : 0;             \
}
</pre></div>The SCF_IMPLEMENT_IBASE_QUERY_END macro implements the closing boilerplate for the QueryInterface() method for a class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the SCF_IMPLEMENT_IBASE_END convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00273">273</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="ga14ac21f00cf6a9b7ef2f5743a81f2cf"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_REFOWNER" ref="ga14ac21f00cf6a9b7ef2f5743a81f2cf" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_REFOWNER          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::AddRefOwner (<span class="keywordtype">void</span>** ref_owner)                              \
{                                                                       \
  <span class="keywordflow">if</span> (!scfWeakRefOwners)                                                \
    scfWeakRefOwners = <span class="keyword">new</span> <a class="code" href="classcsArray.html" title="A templated array class.">csArray&lt;void**&gt;</a> (0, 4);                      \
  scfWeakRefOwners-&gt;InsertSorted (ref_owner);                           \
}                                                                       \
<span class="keywordtype">void</span> Class::RemoveRefOwner (<span class="keywordtype">void</span>** ref_owner)                           \
{                                                                       \
  <span class="keywordflow">if</span> (!scfWeakRefOwners)                                                \
    <span class="keywordflow">return</span>;                                                             \
  <span class="keywordtype">size_t</span> index = scfWeakRefOwners-&gt;FindSortedKey (                      \
    <a class="code" href="classcsArrayCmp.html" title="A functor template which encapsulates a key and a comparison function for use with...">csArrayCmp&lt;void**, void**&gt;</a> (ref_owner));                            \
  <span class="keywordflow">if</span> (index != <a class="code" href="group__util__containers.html#g7477ed9887527029069ab5d5c79e2f70" title="This value is returned whenever an array item could not be located or does not exist...">csArrayItemNotFound</a>) scfWeakRefOwners-&gt;DeleteIndex (     \
    index);                                                             \
}
</pre></div>The <a class="el" href="group__scf.html#ga14ac21f00cf6a9b7ef2f5743a81f2cf" title="The SCF_IMPLEMENT_IBASE_REFOWNER() macro implements the AddRefOwner() and RemoveRefOwner()...">SCF_IMPLEMENT_IBASE_REFOWNER()</a> macro implements the AddRefOwner() and RemoveRefOwner() for a weak reference. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00228">228</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gf6af2f711113e622becbcb69cbdd1fbb"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS" ref="gf6af2f711113e622becbcb69cbdd1fbb" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> Class::scfRemoveRefOwners ()                                       \
{                                                                       \
  <span class="keywordflow">if</span> (!scfWeakRefOwners) <span class="keywordflow">return</span>;                                        \
  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0 ; i &lt; scfWeakRefOwners-&gt;GetSize () ; i++)           \
  {                                                                     \
    <span class="keywordtype">void</span>** p = (*scfWeakRefOwners)[i];                                  \
    *p = 0;                                                             \
  }                                                                     \
  <span class="keyword">delete</span> scfWeakRefOwners;                                              \
  scfWeakRefOwners = 0;                                                 \
}
</pre></div>The <a class="el" href="group__scf.html#gf6af2f711113e622becbcb69cbdd1fbb" title="The SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS() macro implements the scfRemoveRefOwners()...">SCF_IMPLEMENT_IBASE_REMOVE_REF_OWNERS()</a> macro implements the scfRemoveRefOwners() method for a class in a C++ source module. 
<p>
Typically, this macro is automatically employed by the <a class="el" href="group__scf.html#gbcda0c42b7c3a7b12ecdb407bb0ba3d8" title="The SCF_IMPLEMENT_IBASE() macro should be used within the C++ source module that...">SCF_IMPLEMENT_IBASE()</a> convenience macro. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00211">211</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g6d31bde1cff22be19c402a540410c6de"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENTS_EMBEDDED_INTERFACE" ref="g6d31bde1cff22be19c402a540410c6de" args="(Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENTS_EMBEDDED_INTERFACE          </td>
          <td>(</td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%">&nbsp;&nbsp;&nbsp;SCF_IMPLEMENTS_INTERFACE_COMMON (Interface, (&amp;scf##Interface))</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
IMPLEMENT_EMBEDDED_INTERFACE is same as IMPLEMENT_INTERFACE but is used when class implements the interface as an embedded member. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00406">406</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g4933dd6e0823013c37b62e6b99550cd5"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENTS_INTERFACE" ref="g4933dd6e0823013c37b62e6b99550cd5" args="(Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENTS_INTERFACE          </td>
          <td>(</td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="classcsRefTrackerAccess.html#a8c0a506258420512d398cad33afd807">csRefTrackerAccess::AddAlias</a> (static_cast&lt;Interface*&gt; (<span class="keyword">this</span>), <span class="keyword">this</span>);\
  <a class="code" href="group__scf.html#gb71260911e51a3c0885241d009fb55f8" title="This is a common macro used in all IMPLEMENTS_XXX_INTERFACE macros.">SCF_IMPLEMENTS_INTERFACE_COMMON</a> (Interface, <span class="keyword">this</span>)
</pre></div>The IMPLEMENT_INTERFACE macro is used inside QueryInterface function to check if user requested a specific interface, whenever requested version of the interface correspond to the version we have and to return a pointer to that interface if everything is correct. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00398">398</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gb71260911e51a3c0885241d009fb55f8"></a><!-- doxytag: member="scf.h::SCF_IMPLEMENTS_INTERFACE_COMMON" ref="gb71260911e51a3c0885241d009fb55f8" args="(Interface, Object)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_IMPLEMENTS_INTERFACE_COMMON          </td>
          <td>(</td>
          <td class="paramtype">Interface,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Object&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">if</span> (iInterfaceID == <a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits&lt;Interface&gt;::GetID</a>() &amp;&amp;           \
    <a class="code" href="group__scf.html#gb72a7c621912c032409c2147c65a5598" title="This function checks whenever an interface is compatible with given version.">scfCompatibleVersion</a> (iVersion, <a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits&lt;Interface&gt;::GetVersion</a>())) \
  {                                                                     \
    (Object)-&gt;IncRef ();                                                \
    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Interface*<span class="keyword">&gt;</span> (Object);                            \
  }
</pre></div>This is a common macro used in all IMPLEMENTS_XXX_INTERFACE macros. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00412">412</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g711056cbf220f268640935926c404ba5"></a><!-- doxytag: member="scf_interface.h::SCF_INTERFACE" ref="g711056cbf220f268640935926c404ba5" args="(Name, Major, Minor, Micro)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_INTERFACE          </td>
          <td>(</td>
          <td class="paramtype">Name,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Major,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Minor,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Micro&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">struct </span>InterfaceTraits {                                  \
  <span class="keyword">typedef</span> Name InterfaceType;                             \
  CS_FORCEINLINE <span class="keyword">static</span> <a class="code" href="group__scf.html#ga7cc38364be77246ba6f80b3c98b8c59" title="Type of interface version used by iBase::QueryInterface().">scfInterfaceVersion</a> GetVersion() \
  { <span class="keywordflow">return</span> <a class="code" href="group__scf.html#g5bdabeb185cb2a676ce5e223aab4ecd2" title="Use this macro to construct interface version numbers.">SCF_CONSTRUCT_VERSION</a>(Major, Minor, Micro); }  \
  CS_FORCEINLINE <span class="keyword">static</span> <span class="keywordtype">char</span> <span class="keyword">const</span> * GetName() { <span class="keywordflow">return</span> #Name; }  \
}
</pre></div>SCF_INTERFACE can be used to define an interface's version number; you should specify interface name and major, minor and micro version components. 
<p>
This way: <pre>
 struct iSomething : public <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>
 {
 public:
   <a class="el" href="group__scf.html#g711056cbf220f268640935926c404ba5" title="SCF_INTERFACE can be used to define an interface&#39;s version number; you should...">SCF_INTERFACE(iSomething, 0, 0, 1)</a>;
   ...
 };
 </pre> 
<p>Definition at line <a class="el" href="scf__interface_8h-source.html#l00072">72</a> of file <a class="el" href="scf__interface_8h-source.html">scf_interface.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g08f654e1f5dad17bf5c067fd599fd4ef"></a><!-- doxytag: member="scf.h::SCF_PRINT_CALL_ADDRESS" ref="g08f654e1f5dad17bf5c067fd599fd4ef" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_PRINT_CALL_ADDRESS          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Macro for getting the address we were called from (stack backtracing). 
<p>
This works ONLY For GCC &gt;= 2.8.0 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00079">79</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g4866d026c88c980b43d36906766c5db6"></a><!-- doxytag: member="scf.h::SCF_QUERY_INTERFACE" ref="g4866d026c88c980b43d36906766c5db6" args="(Object, Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_QUERY_INTERFACE          </td>
          <td>(</td>
          <td class="paramtype">Object,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%">&nbsp;&nbsp;&nbsp;SCF_QUERY_INTERFACE_is_deprecated&lt;Interface&gt; (Object)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000065">Deprecated:</a></b></dt><dd>Compatibility macro for scfQueryInterface </dd></dl>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00788">788</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gac32ddfef9f398f67f794f52f2700f22"></a><!-- doxytag: member="scf.h::SCF_QUERY_INTERFACE_SAFE" ref="gac32ddfef9f398f67f794f52f2700f22" args="(Object, Interface)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_QUERY_INTERFACE_SAFE          </td>
          <td>(</td>
          <td class="paramtype">Object,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Interface&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%">&nbsp;&nbsp;&nbsp;SCF_QUERY_INTERFACE_SAFE_is_deprecated&lt;Interface&gt; (Object)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000066">Deprecated:</a></b></dt><dd>Compatibility macro for scfQueryInterfaceSafe </dd></dl>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00815">815</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g2ff469be5c227919eb41b976f42dd737"></a><!-- doxytag: member="scf.h::SCF_REGISTER_FACTORY_FUNC" ref="g2ff469be5c227919eb41b976f42dd737" args="(Class)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_REGISTER_FACTORY_FUNC          </td>
          <td>(</td>
          <td class="paramtype">Class&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group__scf.html#g2c6ba99ad6c27369aaf352a41a012223" title="Define the C++ class needed to register an SCF class, but don&amp;#39;t do any automatic...">SCF_DEFINE_FACTORY_FUNC_REGISTRATION</a>(Class)                             \
  Class##_StaticInit Class##_static_init__;
</pre></div>Used in conjunction with SCF_REGISTER_STATIC_LIBRARY to ensure that a reference to the class(es) registered via SCF_REGISTER_STATIC_LIBRARY are actually linked into the application. 
<p>
Invoke this macro once for each &lt;implementation&gt; node mentioned in the MetaInfo registered with SCF_REGISTER_STATIC_LIBRARY. Invocations of this macro must appear after the the invocation of SCF_REGISTER_STATIC_LIBRARY. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00673">673</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g5c0e60d325c4df9731159efbcb607f28"></a><!-- doxytag: member="scf.h::SCF_REGISTER_STATIC_CLASS" ref="g5c0e60d325c4df9731159efbcb607f28" args="(Class, Ident, Desc, Dep)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_REGISTER_STATIC_CLASS          </td>
          <td>(</td>
          <td class="paramtype">Class,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Ident,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Desc,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Dep&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="cssysdef_8h.html#e2ce39bfd93ebeb3498d7269baa9a820">CS_EXPORTED_FUNCTION</a> <a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>* <a class="code" href="cssysdef_8h.html#98a357da90de38c5595450fd4e32a9fc">CS_EXPORTED_NAME</a>(Class,_Create)(<a class="code" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>*);    \
  <span class="keyword">class </span>Class##_StaticInit__                                            \
  {                                                                     \
  <span class="keyword">public</span>:                                                               \
    Class##_StaticInit__()                                              \
    {                                                                   \
      <a class="code" href="group__scf.html#g229540542f2e13fbda9702b00fe5d04a" title="Register a static class.">scfRegisterStaticClass</a>(                                           \
        <a class="code" href="cssysdef_8h.html#98a357da90de38c5595450fd4e32a9fc">CS_EXPORTED_NAME</a>(Class,_Create), Ident, Desc, Dep);             \
    }                                                                   \
  } Class##_static_init__;
</pre></div>Automatically register a built-in class with SCF during startup. 
<p>
When SCF classes are statically linked (vs dynamic linking) they should be referenced from somewhere inside your program, otherwise the static libraries won't be linked into the static executable. This macro defines a dummy variable that registers the class during initialization and ensures that it gets linked into the program 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00612">612</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gaf414ebd09d2ece8f0adfbc065aecc8d"></a><!-- doxytag: member="scf.h::SCF_REGISTER_STATIC_LIBRARY" ref="gaf414ebd09d2ece8f0adfbc065aecc8d" args="(Module, MetaInfo)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_REGISTER_STATIC_LIBRARY          </td>
          <td>(</td>
          <td class="paramtype">Module,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">MetaInfo&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">class </span>Module##_StaticInit                                               \
  {                                                                     \
  <span class="keyword">public</span>:                                                               \
    Module##_StaticInit()                                               \
    {                                                                   \
      <a class="code" href="group__scf.html#g0ad0a0030e5910037392ab6e4984f8ff" title="Register a static class.">scfRegisterStaticClasses</a> (MetaInfo);                              \
    }                                                                   \
  } Module##_static_init__;
</pre></div>Automatically register a static library with SCF during startup. 
<p>
Employ this macro along with one or more invocations of SCF_REGISTER_FACTORY_FUNC. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00628">628</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="ga06c1028fa2d312a312a06636efa56a0"></a><!-- doxytag: member="scf.h::SCF_TRACE" ref="ga06c1028fa2d312a312a06636efa56a0" args="(x)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_TRACE          </td>
          <td>(</td>
          <td class="paramtype">x&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Macro for typing debug strings: Add #define SCF_DEBUG at the top of modules you want to track miscelaneous SCF activity and recompile. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00068">68</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g4e44cfe80f9a64fdac1e5b29049291ce"></a><!-- doxytag: member="scf.h::SCF_USE_STATIC_PLUGIN" ref="g4e44cfe80f9a64fdac1e5b29049291ce" args="(Module)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_USE_STATIC_PLUGIN          </td>
          <td>(</td>
          <td class="paramtype">Module&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>csStaticPluginInit                                            \
  {                                                                     \
    <span class="keyword">class </span>Module { <span class="keyword">public</span>: Module(); };                                 \
    Module Module##_StaticInit;                                         \
  }
</pre></div>Register a statically linked plugin. 
<p>
The _static version of the plugin needs to be linked in, too. 
<p>Definition at line <a class="el" href="scf_8h-source.html#l00658">658</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g654bebfc58b1e4e2c9ef9c6334139c73"></a><!-- doxytag: member="scf_interface.h::SCF_VERSION" ref="g654bebfc58b1e4e2c9ef9c6334139c73" args="(Name, Major, Minor, Micro)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SCF_VERSION          </td>
          <td>(</td>
          <td class="paramtype">Name,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Major,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Minor,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Micro&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">struct </span>Name;                                               \
<span class="keyword">template</span>&lt;&gt;                                                 \
<span class="keyword">class </span><a class="code" href="classscfInterfaceTraits.html" title="Interface information query class.">scfInterfaceTraits</a>&lt;Name&gt;                             \
{                                                          \
<span class="keyword">public</span>:                                                    \
  <span class="keyword">typedef</span> Name InterfaceType;                              \
  <span class="keyword">static</span> <a class="code" href="group__scf.html#ga7cc38364be77246ba6f80b3c98b8c59" title="Type of interface version used by iBase::QueryInterface().">scfInterfaceVersion</a> GetVersion()                  \
  { <span class="keywordflow">return</span> <a class="code" href="group__scf.html#g5bdabeb185cb2a676ce5e223aab4ecd2" title="Use this macro to construct interface version numbers.">SCF_CONSTRUCT_VERSION</a>(Major, Minor, Micro); }   \
  <span class="keyword">static</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* GetName ()                            \
  { <span class="keywordflow">return</span> #Name; }                                        \
  <span class="keyword">static</span> <a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a> GetID ()                           \
  { <a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a>&amp; ID = GetMyID ();                       \
    <span class="keywordflow">if</span> (ID == (<a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a>)(-1))                        \
    { ID = <a class="code" href="structiSCF.html#64db1d2d25a1eca49ddefe6922c41e8e" title="This is the global instance of iSCF.">iSCF::SCF</a>-&gt;<a class="code" href="structiSCF.html#490a51a56ddcd933e18abbe07de75d2f" title="Return the interface ID number that belongs to the given interface.">GetInterfaceID</a> (GetName ());         \
      csStaticVarCleanup (CleanupID);    }                 \
    <span class="keywordflow">return</span> ID;                                             \
  }                                                        \
<span class="keyword">private</span>:                                                   \
  <span class="keyword">static</span> <a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a>&amp; GetMyID ()                        \
  { <span class="keyword">static</span> <a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a> ID = (<a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a>)-1; <span class="keywordflow">return</span> ID; } \
  <span class="keyword">static</span> <span class="keywordtype">void</span> CleanupID ()                                 \
  { GetMyID () = (<a class="code" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd" title="Type of registered interface handle used by iBase::QueryInterface().">scfInterfaceID</a>)-1; }                     \
}
</pre></div>FOR COMPATIBILITY! SCF_VERSION can be used to define an interface's version number; you should specify interface name and major, minor and micro version components. 
<p>
This way: <pre>
 SCF_VERSION (iSomething, 0, 0, 1);
 struct iSomething : public <a class="el" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one...">iBase</a>
   ...
 };
 </pre> Notice that SCF_VERSION cannot be used on interfaces in namespaces 
<p>Definition at line <a class="el" href="scf__interface_8h-source.html#l00435">435</a> of file <a class="el" href="scf__interface_8h-source.html">scf_interface.h</a>.</p>

</div>
</div><p>
<hr><h2>Typedef Documentation</h2>
<a class="anchor" name="gead94ba73ae2e569a89ea7d5aa20db9d"></a><!-- doxytag: member="scf_interface.h::scfFactoryFunc" ref="gead94ba73ae2e569a89ea7d5aa20db9d" args=")(iBase *)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="structiBase.html">iBase</a>*(* <a class="el" href="group__scf.html#gead94ba73ae2e569a89ea7d5aa20db9d">scfFactoryFunc</a>)(<a class="el" href="structiBase.html">iBase</a> *)          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Type of factory function which creates an instance of an SCF class. 
<p>

<p>Definition at line <a class="el" href="scf__interface_8h-source.html#l00137">137</a> of file <a class="el" href="scf__interface_8h-source.html">scf_interface.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="ge3095ac94f71a5ff42374271c90222cd"></a><!-- doxytag: member="scf_interface.h::scfInterfaceID" ref="ge3095ac94f71a5ff42374271c90222cd" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef unsigned long <a class="el" href="group__scf.html#ge3095ac94f71a5ff42374271c90222cd">scfInterfaceID</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Type of registered interface handle used by <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">iBase::QueryInterface()</a>. 
<p>

<p>Definition at line <a class="el" href="scf__interface_8h-source.html#l00051">51</a> of file <a class="el" href="scf__interface_8h-source.html">scf_interface.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="ga7cc38364be77246ba6f80b3c98b8c59"></a><!-- doxytag: member="scf_interface.h::scfInterfaceVersion" ref="ga7cc38364be77246ba6f80b3c98b8c59" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef int <a class="el" href="group__scf.html#ga7cc38364be77246ba6f80b3c98b8c59">scfInterfaceVersion</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Type of interface version used by <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">iBase::QueryInterface()</a>. 
<p>

<p>Definition at line <a class="el" href="scf__interface_8h-source.html#l00056">56</a> of file <a class="el" href="scf__interface_8h-source.html">scf_interface.h</a>.</p>

</div>
</div><p>
<hr><h2>Enumeration Type Documentation</h2>
<a class="anchor" name="gfa9be5679ab03d785820f2474c5ccc6e"></a><!-- doxytag: member="scf.h::@57" ref="gfa9be5679ab03d785820f2474c5ccc6e" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">anonymous enum          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
SCF verbosity flags. 
<p>
For use with <a class="el" href="group__scf.html#ge2da054d4d141e63e22aac6a78e7211a" title="This function should be called to initialize client SCF library.">scfInitialize()</a>. Combine with bitwise-or to select more than one. <dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="ggfa9be5679ab03d785820f2474c5ccc6e103bd7d223adbf6f6320c245ac38d6bc"></a><!-- doxytag: member="SCF_VERBOSE_NONE" ref="ggfa9be5679ab03d785820f2474c5ccc6e103bd7d223adbf6f6320c245ac38d6bc" args="" -->SCF_VERBOSE_NONE</em>&nbsp;</td><td>
No diagnostic information. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggfa9be5679ab03d785820f2474c5ccc6e1618478cd455be73b5425af2658c054f"></a><!-- doxytag: member="SCF_VERBOSE_PLUGIN_SCAN" ref="ggfa9be5679ab03d785820f2474c5ccc6e1618478cd455be73b5425af2658c054f" args="" -->SCF_VERBOSE_PLUGIN_SCAN</em>&nbsp;</td><td>
Directories scanned for plugins. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggfa9be5679ab03d785820f2474c5ccc6ef68a22da73642042e6355dcffdef8a74"></a><!-- doxytag: member="SCF_VERBOSE_PLUGIN_LOAD" ref="ggfa9be5679ab03d785820f2474c5ccc6ef68a22da73642042e6355dcffdef8a74" args="" -->SCF_VERBOSE_PLUGIN_LOAD</em>&nbsp;</td><td>
Plugins loaded and unloaded. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggfa9be5679ab03d785820f2474c5ccc6eeb61d605202afa31732b04143d022e63"></a><!-- doxytag: member="SCF_VERBOSE_PLUGIN_REGISTER" ref="ggfa9be5679ab03d785820f2474c5ccc6eeb61d605202afa31732b04143d022e63" args="" -->SCF_VERBOSE_PLUGIN_REGISTER</em>&nbsp;</td><td>
Plugins discovered and registered. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggfa9be5679ab03d785820f2474c5ccc6e1adcd0e4d15d2bec680094f5154aa4a0"></a><!-- doxytag: member="SCF_VERBOSE_CLASS_REGISTER" ref="ggfa9be5679ab03d785820f2474c5ccc6e1adcd0e4d15d2bec680094f5154aa4a0" args="" -->SCF_VERBOSE_CLASS_REGISTER</em>&nbsp;</td><td>
Classes registered within plugins. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggfa9be5679ab03d785820f2474c5ccc6e5b39fff166e4e12caed2e5cb5ff67ea5"></a><!-- doxytag: member="SCF_VERBOSE_ALL" ref="ggfa9be5679ab03d785820f2474c5ccc6e5b39fff166e4e12caed2e5cb5ff67ea5" args="" -->SCF_VERBOSE_ALL</em>&nbsp;</td><td>
All diagnostic information. </td></tr>
</table>
</dl>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00714">714</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="gf4a34e36cd27e680cfcf002cca9729c7"></a><!-- doxytag: member="plugin.h::csLoadPlugin" ref="gf4a34e36cd27e680cfcf002cca9729c7" args="(iObjectRegistry *object_reg, const char *ClassID)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; csLoadPlugin           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structiObjectRegistry.html">iObjectRegistry</a> *&nbsp;</td>
          <td class="paramname"> <em>object_reg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>ClassID</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Tell plugin manager to load a plugin. 
<p>
<em>Interface:</em> Desired interface type (ex. <a class="el" href="structiGraphics2D.html" title="This is the interface for 2D renderer.">iGraphics2D</a>, <a class="el" href="structiVFS.html" title="The Virtual Filesystem Class is intended to be the only way for Crystal Space engine...">iVFS</a>, etc.). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>object_reg</em>&nbsp;</td><td>object registry </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ClassID</em>&nbsp;</td><td>The SCF class name (ex. crystalspace.graphics3d.software). </td></tr>
  </table>
</dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00172">172</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="gb779ffb37d64ca82d74d416d188d0707"></a><!-- doxytag: member="plugin.h::csLoadPlugin" ref="gb779ffb37d64ca82d74d416d188d0707" args="(iPluginManager *mgr, const char *ClassID)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; csLoadPlugin           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structiPluginManager.html">iPluginManager</a> *&nbsp;</td>
          <td class="paramname"> <em>mgr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>ClassID</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Tell plugin manager to load a plugin. 
<p>
<em>Interface:</em> Desired interface type (ex. <a class="el" href="structiGraphics2D.html" title="This is the interface for 2D renderer.">iGraphics2D</a>, <a class="el" href="structiVFS.html" title="The Virtual Filesystem Class is intended to be the only way for Crystal Space engine...">iVFS</a>, etc.). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>mgr</em>&nbsp;</td><td>An object that implements <a class="el" href="structiPluginManager.html" title="This is the plugin manager.">iPluginManager</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ClassID</em>&nbsp;</td><td>The SCF class name (ex. crystalspace.graphics3d.software). </td></tr>
  </table>
</dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00149">149</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

<p>References <a class="el" href="structiBase.html#3a44d46ca155e6ab0c0179db01011bb0">iBase::DecRef()</a>, <a class="el" href="structiPluginManager.html#8b4f2992fe9fc0621becac1dd5161271">iPluginManager::LoadPlugin()</a>, and <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded">iBase::QueryInterface()</a>.</p>

</div>
</div><p>
<a class="anchor" name="g080cc89b6f142d13e81bd3b1e5da3cae"></a><!-- doxytag: member="plugin.h::csLoadPluginAlways" ref="g080cc89b6f142d13e81bd3b1e5da3cae" args="(iPluginManager *mgr, const char *ClassID)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;<a class="el" href="structiBase.html">iBase</a>&gt; csLoadPluginAlways           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structiPluginManager.html">iPluginManager</a> *&nbsp;</td>
          <td class="paramname"> <em>mgr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>ClassID</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Same as <a class="el" href="group__scf.html#gb779ffb37d64ca82d74d416d188d0707" title="Tell plugin manager to load a plugin.">csLoadPlugin()</a> but does not bother asking for a interface. 
<p>
This is useful for unconditionally loading plugins. 
<p>Definition at line <a class="el" href="plugin_8h-source.html#l00241">241</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

<p>References <a class="el" href="structiPluginManager.html#8b4f2992fe9fc0621becac1dd5161271">iPluginManager::LoadPlugin()</a>.</p>

</div>
</div><p>
<a class="anchor" name="g94cc7866d797878559c05cabf702e3fb"></a><!-- doxytag: member="plugin.h::csLoadPluginCheck" ref="g94cc7866d797878559c05cabf702e3fb" args="(iObjectRegistry *object_reg, const char *ClassID, bool report=true)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; csLoadPluginCheck           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structiObjectRegistry.html">iObjectRegistry</a> *&nbsp;</td>
          <td class="paramname"> <em>object_reg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>ClassID</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&nbsp;</td>
          <td class="paramname"> <em>report</em> = <code>true</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Tell plugin manager to load a plugin but first check if the plugin is not already loaded. 
<p>
<em>Interface:</em> Desired interface type (ex. <a class="el" href="structiGraphics2D.html" title="This is the interface for 2D renderer.">iGraphics2D</a>, <a class="el" href="structiVFS.html" title="The Virtual Filesystem Class is intended to be the only way for Crystal Space engine...">iVFS</a>, etc.). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>object_reg</em>&nbsp;</td><td>object registry </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ClassID</em>&nbsp;</td><td>The SCF class name (ex. crystalspace.graphics3d.software). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>report</em>&nbsp;</td><td>if true then we will report an error in case of error. </td></tr>
  </table>
</dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00207">207</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

<p>References <a class="el" href="reporter_8h-source.html#l00050">CS_REPORTER_SEVERITY_ERROR</a>, and <a class="el" href="reporter_8h-source.html#l00383">csReport</a>.</p>

</div>
</div><p>
<a class="anchor" name="g44411dc666c117c9eb38e7c43140a3a0"></a><!-- doxytag: member="plugin.h::csLoadPluginCheck" ref="g44411dc666c117c9eb38e7c43140a3a0" args="(iPluginManager *mgr, const char *ClassID)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; csLoadPluginCheck           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structiPluginManager.html">iPluginManager</a> *&nbsp;</td>
          <td class="paramname"> <em>mgr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>ClassID</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Tell plugin manager to load a plugin but first check if the plugin is not already loaded. 
<p>
<em>Interface:</em> Desired interface type (ex. <a class="el" href="structiGraphics2D.html" title="This is the interface for 2D renderer.">iGraphics2D</a>, <a class="el" href="structiVFS.html" title="The Virtual Filesystem Class is intended to be the only way for Crystal Space engine...">iVFS</a>, etc.). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>mgr</em>&nbsp;</td><td>An object that implements <a class="el" href="structiPluginManager.html" title="This is the plugin manager.">iPluginManager</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ClassID</em>&nbsp;</td><td>The SCF class name (ex. crystalspace.graphics3d.software). </td></tr>
  </table>
</dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00188">188</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g4c6e52d0906212c2ca5b49fb507afb05"></a><!-- doxytag: member="plugin.h::csQueryPluginClass" ref="g4c6e52d0906212c2ca5b49fb507afb05" args="(iPluginManager *mgr, const char *ClassID)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; csQueryPluginClass           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structiPluginManager.html">iPluginManager</a> *&nbsp;</td>
          <td class="paramname"> <em>mgr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>ClassID</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Find a plugin by its class ID. 
<p>
First the plugin with requested class identifier is found, and after this it is queried for the respective interface; if it does not implement the requested interface, 0 is returned. <em>Interface:</em> Desired interface type (ex. <a class="el" href="structiGraphics2D.html" title="This is the interface for 2D renderer.">iGraphics2D</a>, <a class="el" href="structiVFS.html" title="The Virtual Filesystem Class is intended to be the only way for Crystal Space engine...">iVFS</a>, etc.). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>mgr</em>&nbsp;</td><td>An object that implements <a class="el" href="structiPluginManager.html" title="This is the plugin manager.">iPluginManager</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ClassID</em>&nbsp;</td><td>The SCF class name (ex. crystalspace.graphics3d.software). </td></tr>
  </table>
</dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00117">117</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

<p>References <a class="el" href="structiBase.html#3a44d46ca155e6ab0c0179db01011bb0">iBase::DecRef()</a>, <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded">iBase::QueryInterface()</a>, and <a class="el" href="structiPluginManager.html#88974fb098d664b992252bc4019f235d">iPluginManager::QueryPlugin()</a>.</p>

</div>
</div><p>
<a class="anchor" name="g4c52fd4507c44be72dcff8fa1ec8d307"></a><!-- doxytag: member="plugin.h::csQueryRegistryOrLoad" ref="g4c52fd4507c44be72dcff8fa1ec8d307" args="(iObjectRegistry *Reg, const char *classID, bool report=true)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; csQueryRegistryOrLoad           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structiObjectRegistry.html">iObjectRegistry</a> *&nbsp;</td>
          <td class="paramname"> <em>Reg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>classID</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&nbsp;</td>
          <td class="paramname"> <em>report</em> = <code>true</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Use this macro to query the object registry, loading a plugin if needed. 
<p>
If an object with a given interface exists in an object registry, get that object from the registry. If the registry query fails, try to load a plugin and get the interface from there. If that succeeds, the interface is added to the registry for future use and given a tag the same name as the requested interface. Example use:<p>
<div class="fragment"><pre class="fragment"> <a class="code" href="classcsRef.html" title="A smart pointer.">csRef&lt;iDynamics&gt;</a> dynamic_system = csQueryRegistryOrLoad&lt;iDynamics&gt; (
        object_reg, <span class="stringliteral">"crystalspace.dynamics.ode"</span>);
</pre></div><p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>Reg</em>&nbsp;</td><td>The object registry (of type <a class="el" href="structiObjectRegistry.html" title="This interface serves as a registry of other objects.">iObjectRegistry</a>). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>classID</em>&nbsp;</td><td>The requested SCF class name (ex. "crystalspace.dynamice.ode") </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>report</em>&nbsp;</td><td>if true then we will report an error in case of error. </td></tr>
  </table>
</dl>
<dl compact><dt><b><a class="el" href="todo.html#_todo000032">Todo:</a></b></dt><dd>This probably ought to be made more thread-safe by locking the object registry if possible. </dd></dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>a reference to the requested interface if successful. Otherwise this function returns 0. </dd></dl>

<p>Definition at line <a class="el" href="plugin_8h-source.html#l00277">277</a> of file <a class="el" href="plugin_8h-source.html">plugin.h</a>.</p>

<p>References <a class="el" href="reporter_8h-source.html#l00050">CS_REPORTER_SEVERITY_ERROR</a>, <a class="el" href="reporter_8h-source.html#l00383">csReport</a>, and <a class="el" href="structiObjectRegistry.html#95698fc00d47a53d011c10c75fefce2e">iObjectRegistry::Register()</a>.</p>

</div>
</div><p>
<a class="anchor" name="gb72a7c621912c032409c2147c65a5598"></a><!-- doxytag: member="scf_interface.h::scfCompatibleVersion" ref="gb72a7c621912c032409c2147c65a5598" args="(scfInterfaceVersion iVersion, scfInterfaceVersion iItfVersion)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static bool scfCompatibleVersion           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__scf.html#ga7cc38364be77246ba6f80b3c98b8c59">scfInterfaceVersion</a>&nbsp;</td>
          <td class="paramname"> <em>iVersion</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__scf.html#ga7cc38364be77246ba6f80b3c98b8c59">scfInterfaceVersion</a>&nbsp;</td>
          <td class="paramname"> <em>iItfVersion</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
This function checks whenever an interface is compatible with given version. 
<p>
SCF uses the following comparison criteria: if the major version numbers are equal and required minor and micro version is less or equal than target version minor and micro numbers, the versions are considered compatible. 
<p>Definition at line <a class="el" href="scf__interface_8h-source.html#l00092">92</a> of file <a class="el" href="scf__interface_8h-source.html">scf_interface.h</a>.</p>

<p>Referenced by <a class="el" href="scf__implementation_8h-source.html#l00250">scfImplementation&lt; csBaseTextureFactory &gt;::QueryInterface()</a>.</p>

</div>
</div><p>
<a class="anchor" name="ge034563962e9f68c4310476b40f45884"></a><!-- doxytag: member="scf.h::scfCreateInstance" ref="ge034563962e9f68c4310476b40f45884" args="(char const *const ClassID)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; scfCreateInstance           </td>
          <td>(</td>
          <td class="paramtype">char const *const &nbsp;</td>
          <td class="paramname"> <em>ClassID</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Handy function to create an instance of a shared class. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00822">822</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

<p>References <a class="el" href="structiSCF.html#db5085a0ef2207751473e41a1204ef52">iSCF::CreateInstance()</a>, <a class="el" href="structiBase.html#3a44d46ca155e6ab0c0179db01011bb0">iBase::DecRef()</a>, <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded">iBase::QueryInterface()</a>, and <a class="el" href="scf__interface_8h-source.html#l00159">iSCF::SCF</a>.</p>

</div>
</div><p>
<a class="anchor" name="gedb60456c96a18d8b92fd0a2f896747c"></a><!-- doxytag: member="scf.h::scfInitialize" ref="gedb60456c96a18d8b92fd0a2f896747c" args="(int argc, const char *const argv[])" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void scfInitialize           </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>argc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *const &nbsp;</td>
          <td class="paramname"> <em>argv</em>[]</td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
This function should be called to initialize client SCF library. 
<p>
It uses the default plugin paths provided by <a class="el" href="group__util.html#g482601bfb7bfc86236451f271234a4aa" title="Get a list of directories where plugins are installed.">csGetPluginPaths()</a>. 
</div>
</div><p>
<a class="anchor" name="ge2da054d4d141e63e22aac6a78e7211a"></a><!-- doxytag: member="scf.h::scfInitialize" ref="ge2da054d4d141e63e22aac6a78e7211a" args="(csPathsList const *pluginPaths, unsigned int verbose=SCF_VERBOSE_NONE)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void scfInitialize           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classcsPathsList.html">csPathsList</a> const *&nbsp;</td>
          <td class="paramname"> <em>pluginPaths</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>verbose</em> = <code>SCF_VERBOSE_NONE</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
This function should be called to initialize client SCF library. 
<p>
If a number of plugin paths are provided, the directories will be scanned for plugins and their SCF-related registry data will be retrieved. The root node within the registry data document should be named "plugin", and the SCF-related information should be in a child node of the root named "scf". It is legal to call scfInitialize more than once (possibly providing a different set of directories each time). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pluginPaths</em>&nbsp;</td><td>Directories that will be scanned for plugins. If this parameter is 0, the paths returned by <a class="el" href="group__util.html#g482601bfb7bfc86236451f271234a4aa" title="Get a list of directories where plugins are installed.">csGetPluginPaths()</a> will be scanned. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>verbose</em>&nbsp;</td><td>One or more of the <code>SCF_VERBOSE_FOO</code> flags combined with bitwise-or which control SCF verbosity. </td></tr>
  </table>
</dl>
<dl class="remark" compact><dt><b>Remarks:</b></dt><dd>The path list is ignored for static builds. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g2e8cf383ca5045f2b0c05374ff0107c3"></a><!-- doxytag: member="scf.h::scfQueryInterface" ref="g2e8cf383ca5045f2b0c05374ff0107c3" args="(ClassPtr object)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface, class ClassPtr&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; scfQueryInterface           </td>
          <td>(</td>
          <td class="paramtype">ClassPtr&nbsp;</td>
          <td class="paramname"> <em>object</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Helper function around <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">iBase::QueryInterface</a>. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00771">771</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g00cb2faae8bcba56ca1f5cd3a887aa14"></a><!-- doxytag: member="scf.h::scfQueryInterfaceSafe" ref="g00cb2faae8bcba56ca1f5cd3a887aa14" args="(ClassPtr object)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Interface, class ClassPtr&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classcsPtr.html">csPtr</a>&lt;Interface&gt; scfQueryInterfaceSafe           </td>
          <td>(</td>
          <td class="paramtype">ClassPtr&nbsp;</td>
          <td class="paramname"> <em>object</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Helper function around <a class="el" href="structiBase.html#2adc74eb0286a65f2310f221be4ddded" title="Query a particular interface implemented by this object.">iBase::QueryInterface</a> which also does null-check of object. 
<p>

<p>Definition at line <a class="el" href="scf_8h-source.html#l00796">796</a> of file <a class="el" href="scf_8h-source.html">scf.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="g229540542f2e13fbda9702b00fe5d04a"></a><!-- doxytag: member="scf.h::scfRegisterStaticClass" ref="g229540542f2e13fbda9702b00fe5d04a" args="(scfFactoryFunc, const char *iClassID, const char *Description, const char *Dependencies=0)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void scfRegisterStaticClass           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__scf.html#gead94ba73ae2e569a89ea7d5aa20db9d">scfFactoryFunc</a>&nbsp;</td>
          <td class="paramname">, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>iClassID</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>Description</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>Dependencies</em> = <code>0</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Register a static class. 
<p>
This needs extra handling since they require automatic registration even when SCF is initialized after it was possibly shut down previously. The static class info is stored and read out later when SCF is initialized. 
</div>
</div><p>
<a class="anchor" name="g0ad0a0030e5910037392ab6e4984f8ff"></a><!-- doxytag: member="scf.h::scfRegisterStaticClasses" ref="g0ad0a0030e5910037392ab6e4984f8ff" args="(char const *xml)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void scfRegisterStaticClasses           </td>
          <td>(</td>
          <td class="paramtype">char const *&nbsp;</td>
          <td class="paramname"> <em>xml</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Register a static class. 
<p>
This needs extra handling since they require automatic registration even when SCF is initialized after it was possibly shut down previously. The static class info is stored and read out later when SCF is initialized. 
</div>
</div><p>
<a class="anchor" name="gdf22686621a246ba1de548575f3fc029"></a><!-- doxytag: member="scf.h::scfRegisterStaticFactoryFunc" ref="gdf22686621a246ba1de548575f3fc029" args="(scfFactoryFunc, const char *FactClass)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void scfRegisterStaticFactoryFunc           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__scf.html#gead94ba73ae2e569a89ea7d5aa20db9d">scfFactoryFunc</a>&nbsp;</td>
          <td class="paramname">, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>FactClass</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Register a static class. 
<p>
This needs extra handling since they require automatic registration even when SCF is initialized after it was possibly shut down previously. The static class info is stored and read out later when SCF is initialized. 
</div>
</div><p>
<hr size="1"><address><small>Generated for Crystal Space 1.2.1 by 
<a href="http://www.doxygen.org/index.html">doxygen</a> 1.5.3 
</small></address> </div></body> </html>