diff options
Diffstat (limited to 'lib/ic/doc/src/ch_c_client.xml')
-rw-r--r-- | lib/ic/doc/src/ch_c_client.xml | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/lib/ic/doc/src/ch_c_client.xml b/lib/ic/doc/src/ch_c_client.xml new file mode 100644 index 0000000000..7d4f8ec91a --- /dev/null +++ b/lib/ic/doc/src/ch_c_client.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1998</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>The C Client Back-end</title> + <prepared></prepared> + <docno></docno> + <date>2004-01-14</date> + <rev>C</rev> + <file>ch_c_client.xml</file> + </header> + + <section> + <title>Introduction</title> + <p>With the option <c>{be, c_client}</c> the IDL Compiler generates + C client stubs according to the IDL to C mapping, on top of the + Erlang distribution and gen_server protocols.</p> + <p>The developer has to write additional code, that together with + the generated C client stubs, form a hidden Erlang node. That + additional code uses <c>erl_interface</c> functions for defining + the hidden node, and for establishing connections to other + Erlang nodes.</p> + </section> + + <section> + <title>Generated Stub Files</title> + <p>The generated stub files are:</p> + <list type="bulleted"> + <item> + <p>For each IDL interface, a C source file, the name of which + is <c><![CDATA[<Scoped Interface Name>.c]]></c>. Each operation of the + IDL interface is mapped to a C function (with scoped name) + in that file;</p> + </item> + <item> + <p>C source files that contain functions for type conversion, + memory allocation, and data encoding/decoding;</p> + </item> + <item> + <p>C header files that contain function prototypes and type + definitions.</p> + </item> + </list> + <p>All C functions are exported (i.e. not declared static).</p> + </section> + + <section> + <title>C Interface Functions</title> + <p>For each IDL operation a C interface function is + generated, the prototype of which is:</p> + <p><c><![CDATA[<Return Value> <Scoped Function Name>(<Interface Object> oe_obj, <Parameters>, CORBA_Environment *oe_env);]]></c></p> + <p>where</p> + <list type="bulleted"> + <item> + <p><c><![CDATA[<Return Value>]]></c> is the value to be returned as defined + by the IDL specification;</p> + </item> + <item> + <p><c><![CDATA[<Interface Object> oe_obj]]></c> is the client interface + object;</p> + </item> + <item> + <p><c><![CDATA[<Parameters>]]></c> is a list of parameters of the + operation, defined in the same order as defined by the IDL + specification;</p> + </item> + <item> + <p><c>CORBA_Environment *oe_env</c> is a pointer to the current + client environment. It contains the current file descriptor, + the current input and output buffers, etc. For details see + <seealso marker="ch_c_corba_env#corbaenv">CORBA_Environment C Structure</seealso>.</p> + </item> + </list> + </section> + + <section> + <title>Generating, Compiling and Linking</title> + <p>To generate the C client stubs type the following in an + appropriate shell:</p> + <p><c><![CDATA[erlc -I ICROOT/include "+{be, c_client}" File.idl]]></c>,</p> + <p>where <c>ICROOT</c> is the root of the IC application. The + <c>-I ICROOT/include</c> is only needed if <c>File.idl</c> + refers to <c>erlang.idl</c>.</p> + <p>When compiling a generated C stub file, the directories + <c>ICROOT/include</c> and <c>EICROOT/include</c>, have to be + specified as include directories, where <c>EIROOT</c> is the + root directory of the Erl_interface application.</p> + <p>When linking object files the <c>EIROOT/lib</c> and + <c>ICROOT/priv/lib</c> directories have to be specified. </p> + </section> + + <section> + <title>An Example</title> + <p>In this example the IDL specification file "random.idl" is used + for generating C client stubs (the file is contained in the IC + <c>/examples/c-client</c> directory):</p> + <code type="none"><![CDATA[ +module rmod { + + interface random { + + double produce(); + + oneway void init(in long seed1, in long seed2, in long seed3); + + }; + +}; ]]></code> + <p>Generate the C client stubs:</p> + + <code type="none"><![CDATA[ +erlc '+{be, c_client}' random.idl +Erlang IDL compiler version X.Y.Z ]]></code> + + <p>Six files are generated. </p> + <p>Compile the C client stubs:</p> + <p>Please read the <c>ReadMe</c> file att the + <c>examples/c-client</c> directory</p> + <p>In the same + directory you can find all the code for this example.</p> + <p>In particular you will find the <c>client.c</c> file that contains + all the additional code that must be written to obtain a complete + client. </p> + <p>In the <c>examples/c-client</c> directory you will also find + source code for an Erlang server, which can be used for testing + the C client.</p> + </section> +</chapter> + + |