File: node45.html

package info (click to toggle)
babel 0.10.2-1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 43,932 kB
  • ctags: 29,707
  • sloc: java: 74,695; ansic: 73,142; cpp: 40,649; sh: 18,411; f90: 10,062; fortran: 6,727; python: 6,406; makefile: 3,866; xml: 118; perl: 48
file content (192 lines) | stat: -rw-r--r-- 6,448 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
original version by:  Nikos Drakos, CBLU, University of Leeds
* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Writing the Client</TITLE>
<META NAME="description" CONTENT="Writing the Client">
<META NAME="keywords" CONTENT="users_guide">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">

<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="users_guide.css">

<LINK REL="next" HREF="node46.html">
<LINK REL="previous" HREF="node44.html">
<LINK REL="up" HREF="node41.html">
<LINK REL="next" HREF="node46.html">
</HEAD>

<BODY >

<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html1241"
  HREF="node46.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html1235"
  HREF="node41.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html1229"
  HREF="node44.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html1237"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html1239"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html1242"
  HREF="node46.html">Final Remarks</A>
<B> Up:</B> <A NAME="tex2html1236"
  HREF="node41.html">Hello World Tutorial</A>
<B> Previous:</B> <A NAME="tex2html1230"
  HREF="node44.html">Writing the Implementation</A>
 &nbsp; <B>  <A NAME="tex2html1238"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html1240"
  HREF="node317.html">Index</A></B> 
<BR>
<BR></DIV>
<!--End of Navigation Panel-->

<H1><A NAME="SECTION02340000000000000000"></A><A NAME="1558"></A>
<BR>
Writing the Client
</H1>

<P>
We will write the client in the main hello/ subdirectory.  
The main program will be written in C.  
File hello.c is as follows: 

<P>
<BR>
<PRE  CLASS="verbatim">#include &lt;stdio.h&gt;
#include "Hello_World.h" 

int main(int argc, char** argv)
{
  Hello_World h = Hello_World__create();
  char* msg = Hello_World_getMsg(h);
  printf("%s\n", msg);
  Hello_World_deleteRef(h);
  free(msg);
}
</PRE></td></tr></table></blockquote>
<P>
This code creates the Hello_World object, calls the getMsg() method, 
prints the ubiquitous saying, decrements the reference count for 
the object, and frees the message string. 

<P>
There are a few details worth noting here.  The C bindings
generate function names by combining packages, classes, and method names 
with underscores (e.g. <TT>Hello_World_getMsg()</TT>.  Whenever you 
see double underscores<A NAME="1561"></A> in Babel generated symbols, they indicate something
built-in to (and sometimes specific to) the language binding.  
The <TT>_create()</TT> method is built-in to every instantiatable class 
defined in SIDL, triggering the creation of Babel internal data structures
as well as the constructor of the actual object implementation.

<P>
To generate<A NAME="1563"></A> the C glue code necessary to call the library, 
we run the Babel tool again, this time specifying C as the target language: 

<P>
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>babel -client=C hello.sidl</B></TT>
<BR>
</TT></BLOCKQUOTE>or simply
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>babel -cC hello.sidl</B></TT>
<BR>
</TT></BLOCKQUOTE>
<P>
The ``<TT>-cC</TT>'' flag,
or its equivalent long-form ``<TT>-client=C</TT>'', tells the 
Babel code generator to create only the C stub calling code, 
not the entire library implementation.  
The library libhello.so already contains the
necessary IOR, skeleton, and implementation object files. 
We compile the hello program using the following GNU Make
Makefile:<A NAME="1572"></A>  

<P>
<BR>
<PRE  CLASS="verbatim">.c.o:
    gcc -I$(HOME)/babel/include -Ilib -c $&lt; 

include babel.make
OBJS = hello.o ${STUBSRCS:.c=.o}

hello: ${OBJS}
    gcc ${OBJS} -o $@ \
      -Rlib -Llib -lhello \
      -R$(HOME)/babel/lib -L$(HOME)/babel/lib -lsidl

clean:
    ${RM} *.o hello
</PRE></td></tr></table></blockquote>
<P>
Note that the ``-R'' flags tell the dynamic library loader where to find the 
hello and sidl shared libraries.  
You could achieve the same behavior through environment
variables such as <TT>LD_LIBRARY_PATH</TT>. 
On some machines and compilers (notably linux-gcc-3.0) the -R flag
is no longer supported, so you will have to modify the
appropriate environment variable to find the shared library.

<P>
Finally, we make the executable and run it: 

<P>
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>make hello</B></TT>
<BR><TT>%</TT> <TT><B>./hello</B></TT>
<BR>
Hello World
</TT></BLOCKQUOTE>
<P>

<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html1241"
  HREF="node46.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html1235"
  HREF="node41.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html1229"
  HREF="node44.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html1237"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html1239"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html1242"
  HREF="node46.html">Final Remarks</A>
<B> Up:</B> <A NAME="tex2html1236"
  HREF="node41.html">Hello World Tutorial</A>
<B> Previous:</B> <A NAME="tex2html1230"
  HREF="node44.html">Writing the Implementation</A>
 &nbsp; <B>  <A NAME="tex2html1238"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html1240"
  HREF="node317.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<br><br>babel-0.10.2<br>users_guide Last Modified 2005-03-23<br><br><a href="http://www.llnl.gov/CASC/components">http://www.llnl.gov/CASC/components</a><br><a href="mailto:components@llnl.gov">components@llnl.gov</a>
</ADDRESS>
</BODY>
</HTML>