<HTML ><HEAD ><TITLE >C $B$*$h$S(B C++ $B$G$N(B XML-RPC $B$N;H$$J}(B</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK REL="HOME" TITLE="XML-RPC HOWTO" HREF="index.html"><LINK REL="PREVIOUS" TITLE="Python $B$G$N(B XML-RPC $B$N;H$$J}(B" HREF="xmlrpc-howto-python.html"><LINK REL="NEXT" TITLE="Java $B$G$N(B XML-RPC $B$N;H$$J}(B" HREF="xmlrpc-howto-java.html"></HEAD ><BODY CLASS="SECTION" BGCOLOR="#FFFFFF" TEXT="#000000" ><DIV CLASS="NAVHEADER" ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >XML-RPC HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="xmlrpc-howto-python.html" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="xmlrpc-howto-java.html" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECTION" ><H1 CLASS="SECTION" ><A NAME="XMLRPC-HOWTO-C" >8. C $B$*$h$S(B C++ $B$G$N(B XML-RPC $B$N;H$$J}(B</A ></H1 ><P >C/C++ $BMQ(B XML-RPC $B$N%3%T!<$rF@$k$K$O!"(B<A HREF="http://xmlrpc-c.sourceforge.net" TARGET="_top" >xmlrpc-c $B$N%&%'%V%5%$%H(B</A >$B$r(B $B8+$F$/$@$5$$!#(B</P ><P >RPM $B7A<0$G$9$Y$F$N$b$N$r%@%&%s%m!<%I$9$k$3$H$b!"%=!<%9$+$i<+J,(B $B$G4D6-$r9=C[$9$k$3$H$b$G$-$^$9!#(B</P ><DIV CLASS="SECTION" ><H2 CLASS="SECTION" ><A NAME="XMLRPC-HOWTO-C-CLIENT" >8.1. C $B%/%i%$%"%s%H(B</A ></H2 ><P >$B<!$N%W%m%0%i%`%3!<%I$r(B <TT CLASS="FILENAME" >getSumAndDifference.c</TT > $B$H$7$F%U%!%$%k$KJ]B8$7(B $B$F$/$@$5$$!#(B</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >#include <stdio.h> #include <xmlrpc.h> #include <xmlrpc_client.h> #define NAME "XML-RPC getSumAndDifference C Client" #define VERSION "0.1" #define SERVER_URL "http://xmlrpc-c.sourceforge.net/api/sample.php" void die_if_fault_occurred (xmlrpc_env *env) { /* Check our error-handling environment for an XML-RPC fault. */ if (env->fault_occurred) { fprintf(stderr, "XML-RPC Fault: %s (%d)\n", env->fault_string, env->fault_code); exit(1); } } int main (int argc, char** argv) { xmlrpc_env env; xmlrpc_value *result; xmlrpc_int32 sum, difference; /* Start up our XML-RPC client library. */ xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION); xmlrpc_env_init(&env); /* Call our XML-RPC server. */ result = xmlrpc_client_call(&env, SERVER_URL, "sample.sumAndDifference", "(ii)", (xmlrpc_int32) 5, (xmlrpc_int32) 3); die_if_fault_occurred(&env); /* Parse our result value. */ xmlrpc_parse_value(&env, result, "{s:i,s:i,*}", "sum", &sum, "difference", &difference); die_if_fault_occurred(&env); /* Print out our sum and difference. */ printf("Sum: %d, Difference: %d\n", (int) sum, (int) difference); /* Dispose of our result value. */ xmlrpc_DECREF(result); /* Shutdown our XML-RPC client library. */ xmlrpc_env_clean(&env); xmlrpc_client_cleanup(); return 0; }</PRE ></FONT ></TD ></TR ></TABLE ><P >$B%3%s%Q%$%k$9$k$?$a$NF~NO$r<($7$^$9(B -</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >bash$ CLIENT_CFLAGS=`xmlrpc-c-config libwww-client --cflags` bash$ CLIENT_LIBS=`xmlrpc-c-config libwww-client --libs` bash$ gcc $CLIENT_CFLAGS -o getSumAndDifference getSumAndDifference.c $CLIENT_LIBS</PRE ></FONT ></TD ></TR ></TABLE ><P >$B$"$J$?$N%7%9%F%`$N(B C $B%3%s%Q%$%i$NL>A0$,(B <B CLASS="COMMAND" >gcc</B > $B$G$O$J$$$+$b$7$l$J$$$N$G!"<B:]$NF~NO$G$O$=(B $B$l$rBe$($kI,MW$,$"$k$+$b$7$l$^$;$s!#(B</P ></DIV ><DIV CLASS="SECTION" ><H2 CLASS="SECTION" ><A NAME="XMLRPC-HOWTO-CC-CLIENT" >8.2. C++ $B%/%i%$%"%s%H(B</A ></H2 ><P >$B<!$N%W%m%0%i%`%3!<%I$r(B <TT CLASS="FILENAME" >getSumAndDifference2.cc</TT > $B$H$7$F%U%!%$%k$KJ]B8(B $B$7$F$/$@$5$$!#(B</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >#include <iostream.h> #include <XmlRpcCpp.h> #define NAME "XML-RPC getSumAndDifference C++ Client" #define VERSION "0.1" #define SERVER_URL "http://xmlrpc-c.sourceforge.net/api/sample.php" static void get_sum_and_difference () { // Build our parameter array. XmlRpcValue param_array = XmlRpcValue::makeArray(); param_array.arrayAppendItem(XmlRpcValue::makeInt(5)); param_array.arrayAppendItem(XmlRpcValue::makeInt(3)); // Create an object to resprent the server, and make our call. XmlRpcClient server (SERVER_URL); XmlRpcValue result = server.call("sample.sumAndDifference", param_array); // Extract the sum and difference from our struct. XmlRpcValue::int32 sum = result.structGetValue("sum").getInt(); XmlRpcValue::int32 diff = result.structGetValue("difference").getInt(); cout << "Sum: " << sum << ", Difference: " << diff << endl; } int main (int argc, char **argv) { // Start up our client library. XmlRpcClient::Initialize(NAME, VERSION); // Call our client routine, and watch out for faults. try { get_sum_and_difference(); } catch (XmlRpcFault& fault) { cerr << argv[0] << ": XML-RPC fault #" << fault.getFaultCode() << ": " << fault.getFaultString() << endl; XmlRpcClient::Terminate(); exit(1); } // Shut down our client library. XmlRpcClient::Terminate(); return 0; }</PRE ></FONT ></TD ></TR ></TABLE ><P >$B%3%s%Q%$%k$9$k$?$a$NF~NO$r<($7$^$9(B -</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >bash$ CLIENT_CFLAGS=`xmlrpc-c-config c++ libwww-client --cflags` bash$ CLIENT_LIBS=`xmlrpc-c-config c++ libwww-client --libs` bash$ c++ $CLIENT_CFLAGS -o getSumAndDifference2 getSumAndDifference2.cc $CLIENT_LIBS</PRE ></FONT ></TD ></TR ></TABLE ><P >$B$3$N:n6H$N$?$a$K!"$+$J$j:G6a$N(B C++ $B%3%s%Q%$%i$,I,MW$H$J$j$^(B $B$9!#(B</P ></DIV ><DIV CLASS="SECTION" ><H2 CLASS="SECTION" ><A NAME="XMLRPC-HOWTO-CC-PROXY" >8.3. $BBeBX%/%i%9(B (Proxy Class) $B$G$N(B C++ $B%/%i%$%"%s%H(B</A ></H2 ><P >XML-RPC $B%5!<%P$,(B<A HREF="xmlrpc-howto-interfaces.html#XMLRPC-HOWTO-API-INTROSPECTION" >$B%$%s%H%m%9%Z%/%7%g%s(B API</A > $B$r%5%]!<%H$7$F$$$k$J$i!"<+F0E*$K(B $B$=$N%5!<%PMQ$N(B C++ $BBeBX%/%i%9$r@8@.$G$-$^$9!#BeBX%/%i%9$r@8@.$9$k(B $B$?$a$K$O!"<!$N%3%^%s%I$rF~NO$7$F$=$N=PNO$r%U%!%$%k$KJ]B8$7$F$/$@$5(B $B$$!#(B</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >bash$ xml-rpc-api2cpp \ > http://xmlrpc-c.sourceforge.net/api/sample.php sample SampleProxy</PRE ></FONT ></TD ></TR ></TABLE ><P >$B$3$l$O(B <TT CLASS="LITERAL" >sample</TT > $B$G;O$^$k$9$Y$F$N%a%=%C%IMQ(B $B$N%i%C%Q!<$,4^$^$l$F$$$k(B <TT CLASS="LITERAL" >SampleProxy</TT > $B$HL>$E$1$i(B $B$l$?BeBX%/%i%9$r@8@.$7$^$9!#$"$J$?$,K>$`J}K!$G$3$N%/%i%9$r=$@5$7$F(B $B$b$+$^$$$^$;$s!#(B</P ></DIV ><DIV CLASS="SECTION" ><H2 CLASS="SECTION" ><A NAME="XMLRPC-HOWTO-C-CGI" >8.4. CGI $B%Y!<%9$N(B C $B%5!<%P(B</A ></H2 ><P >$B<!$N%W%m%0%i%`%3!<%I$r(B <TT CLASS="FILENAME" >sumAndDifference.c</TT > $B$H$7$F%U%!%$%k$KJ]B8$7$F$/(B $B$@$5$$!#(B</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >#include <xmlrpc.h> #include <xmlrpc_cgi.h> xmlrpc_value * sumAndDifference (xmlrpc_env *env, xmlrpc_value *param_array, void *user_data) { xmlrpc_int32 x, y; /* Parse our argument array. */ xmlrpc_parse_value(env, param_array, "(ii)", &x, &y); if (env->fault_occurred) return NULL; /* Return our result. */ return xmlrpc_build_value(env, "{s:i,s:i}", "sum", x + y, "difference", x - y); } int main (int argc, char **argv) { /* Set up our CGI library. */ xmlrpc_cgi_init(XMLRPC_CGI_NO_FLAGS); /* Install our only method (with a method signature and a help string). */ xmlrpc_cgi_add_method_w_doc("sample.sumAndDifference", &sumAndDifference, NULL, "S:ii", "Add and subtract two integers."); /* Call the appropriate method. */ xmlrpc_cgi_process_call(); /* Clean up our CGI library. */ xmlrpc_cgi_cleanup(); }</PRE ></FONT ></TD ></TR ></TABLE ><P >$B%3%s%Q%$%k$9$k$?$a$NF~NO$r<($7$^$9(B -</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >bash$ CGI_CFLAGS=`xmlrpc-c-config cgi-server --cflags` bash$ CGI_LIBS=`xmlrpc-c-config cgi-server --libs` bash$ gcc $CGI_CFLAGS -o sumAndDifference.cgi sumAndDifference.c $CGI_LIBS</PRE ></FONT ></TD ></TR ></TABLE ><P >$B$3$l$,=*N;$7$?$i!"(B<TT CLASS="FILENAME" >sumAndDifference.cgi</TT > $B$r%&%'%V%5!<%P$N(B <TT CLASS="FILENAME" >cgi-bin</TT > $B%G%#%l%/%H%j$K%3%T!<(B $B$7$F$/$@$5$$!#(B</P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="xmlrpc-howto-python.html" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="xmlrpc-howto-java.html" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Python $B$G$N(B XML-RPC $B$N;H$$J}(B</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Java $B$G$N(B XML-RPC $B$N;H$$J}(B</TD ></TR ></TABLE ></DIV ></BODY ></HTML >