<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Exporting a C API</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="index.html" title="GObject Reference Manual">
<link rel="up" href="chapter-intro.html" title="Background">
<link rel="prev" href="chapter-intro.html" title="Background">
<link rel="next" href="chapter-gtype.html" title="The GLib Dynamic Type System">
<meta name="generator" content="GTK-Doc V1.14 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
<td><a accesskey="p" href="chapter-intro.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="chapter-intro.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">GObject Reference Manual</th>
<td><a accesskey="n" href="chapter-gtype.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="sect1" title="Exporting a C API">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id545626"></a>Exporting a C API</h2></div></div></div>
<p>
      C APIs are defined by a set of functions and global variables which are usually exported from a 
      binary. C functions have an arbitrary number of arguments and one return value. Each function is thus
      uniquely identified by the function name and the set of C types which describe the function arguments
      and return value. The global variables exported by the API are similarly identified by their name and 
      their type.
    </p>
<p>
      A C API is thus merely defined by a set of names to which a set of types are associated. If you know the
      function calling convention and the mapping of the C types to the machine types used by the platform you 
      are on, you can resolve the name of each function to find where the code associated to this function 
      is located in memory, and then construct a valid argument list for the function. Finally, all you have to 
      do is trigger a call to the target C function with the argument list.
    </p>
<p>
      For the sake of discussion, here is a sample C function and the associated 32 bit x86 
      assembly code generated by GCC on my Linux box:
</p>
<pre class="programlisting">
static void function_foo (int foo)
{}

int main (int argc, char *argv[])
{

        function_foo (10);

        return 0;
}

push   $0xa
call   0x80482f4 &lt;function_foo&gt;
</pre>
<p>
      The assembly code shown above is pretty straightforward: the first instruction pushes
      the hexadecimal value 0xa (decimal value 10) as a 32-bit integer on the stack and calls 
      <code class="function">function_foo</code>. As you can see, C function calls are implemented by
      gcc by native function calls (this is probably the fastest implementation possible).
    </p>
<p>
      Now, let's say we want to call the C function <code class="function">function_foo</code> from 
      a Python program. To do this, the Python interpreter needs to:
      </p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>Find where the function is located. This probably means finding the binary generated by the C compiler
        which exports this function.</p></li>
<li class="listitem"><p>Load the code of the function in executable memory.</p></li>
<li class="listitem"><p>Convert the Python parameters to C-compatible parameters before calling 
        the function.</p></li>
<li class="listitem"><p>Call the function with the right calling convention.</p></li>
<li class="listitem"><p>Convert the return values of the C function to Python-compatible
        variables to return them to the Python code.</p></li>
</ul></div>
<p>
    </p>
<p>
      The process described above is pretty complex and there are a lot of ways to make it entirely automatic
      and transparent to C and Python programmers:
      </p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>The first solution is to write by hand a lot of glue code, once for each function exported or imported,
        which does the Python-to-C parameter conversion and the C-to-Python return value conversion. This glue code is then 
        linked with the interpreter which allows Python programs to call Python functions which delegate work to
        C functions.</p></li>
<li class="listitem"><p>Another, nicer solution is to automatically generate the glue code, once for each function exported or
        imported, with a special compiler which
        reads the original function signature.</p></li>
<li class="listitem"><p>The solution used by GLib is to use the GType library which holds at runtime a description of
        all the objects manipulated by the programmer. This so-called <span class="emphasis"><em>dynamic type</em></span>
        <sup>[<a name="id545730" href="#ftn.id545730" class="footnote">1</a>]</sup>
        library is then used by special generic glue code to automatically convert function parameters and
        function calling conventions between different runtime domains.</p></li>
</ul></div>
<p>
      The greatest advantage of the solution implemented by GType is that the glue code sitting at the runtime domain 
      boundaries is written once: the figure below states this more clearly.
      </p>
<div class="figure">
<a name="id545749"></a><p class="title"><b>Figure 1. </b></p>
<div class="figure-contents"><div class="mediaobject" align="center"><img src="glue.png" align="middle"></div></div>
</div>
<p><br class="figure-break">
      
      Currently, there exist at least Python and Perl generic glue code which makes it possible to use
      C objects written with GType directly in Python or Perl, with a minimum amount of work: there
      is no need to generate huge amounts of glue code either automatically or by hand.
    </p>
<p>
      Although that goal was arguably laudable, its pursuit has had a major influence on
      the whole GType/GObject library. C programmers are likely to be puzzled at the complexity 
      of the features exposed in the following chapters if they forget that the GType/GObject library
      was not only designed to offer OO-like features to C programmers but also transparent 
      cross-language interoperability.
    </p>
<div class="footnotes">
<br><hr width="100" align="left">
<div class="footnote"><p><sup>[<a name="ftn.id545730" href="#id545730" class="para">1</a>] </sup>
            There are numerous different implementations of dynamic type systems: all C++ 
            compilers have one, Java and .NET have one too. A dynamic type system allows you
            to get information about every instantiated object at runtime. It can be implemented
            by a process-specific database: every new object created registers the characteristics 
            of its associated type in the type system. It can also be implemented by introspection
            interfaces. The common point between all these different type systems and implementations
            is that they all allow you to query for object metadata at runtime.
          </p></div>
</div>
</div>
<div class="footer">
<hr>
          Generated by GTK-Doc V1.14</div>
</body>
</html>