These are instructions for using the Curl HTTP client library for the XML-RPC communication in an XML-RPC client, on Windows. Normally, an XML-RPC client running on Windows uses the HTTP client facilities built into Windows (Wininet) instead. These instructions worked at one time, but they do not appear to work with current Xmlrpc-c code. If you are able to update them to work with current Xmlrpc-c code, please send the updates to the Xmlrpc-c maintainer to help the next person. Motivation: Let’s say you need to have a Xmlrpc-c client running as a service. In this situation you cannot use WinInet. You can find details of the restriction on the Curl website or various Microsoft KB articles. Your alternative is to use the Curl HTTP client library. This document tells how to use use the Curl library instead of the default Wininet as your client XML transport mechanism. Overview: The default projects in Xmlrpc-c create standalone executables that do not require other DLL’s. Therefore, we need to create static link libraries for libcurl. Once we create the link libraries, we add them (plus the requisite curl headers) into the Xmlrpc-c project. Finally, we configure the build to build the curl transport and build client libraries that use it. Finally, we build and test the project. BUILD THE CURL LIBRARY ---------------------- Download the Curl source code. Run the buildconf.bat to generate some additional files. This builds a 'dummy' hugehelp.c, but it can also be built using the src\mkhelp.pl Perl script. You may have to build your own VCPROJ file for CURL, if you want to use MSVC. To build all the CURL library variations, use > nmake /nologo vc-all but note this will use the /MD[d] DLL runtime. Only by adding RTCFGLIB=static to each of the makefile commands will /MT[d] be used. Essentially, for building the static Debug or Release CURL libraries, it is all the sources in the curl\lib folder. Make sure you choose /MT and /MTd for the runtime, and build both using the name 'libcurl.lib'. BUILD XMLRPC-C, LINK WITH CURL ------------------------------ From the step above, you have Debug\libcurl.lib and Release\libcurl.lib. After running xmlrpc-c\Windows\configurewin32.bat, start Visual Studio. In the File View, in the 'xmlrpc' project, in the properties of xmlrpc_curl_transport.c, change "Exclude file from build" from "yes" to "no", for Debug and Release. ==>BUT NOTE: in current Xmlrpc-c, this is broken - there is no 'xmlrpc' project and no xmlrpc_curl_transport.c in any projects. You need to add it. What you need to do is apparently to get xmlrpc_curl_transport.c, curltransaction.c, curlmulti.c into the libxmlrpc_client library built by the libxmlrpc_client project. In the 'Header Files' section, open the "transport_config.h" file, and change MUST_BUILD_CURL_CLIENT to 1, and the XMLRPC_DEFAULT_TRANSPORT to "curl", if you want. As usual, for each of the "client" projects, and 'rpctest', in the properties, Linker section, you can add the library libcurl.lib on the Input tab, and the relative path to the library in the General tab to something like - ..\..\curl\Debug and ..\..\curl\Release (or wherever you placed the static Curl libraries you built if you didn't follow recommendations above). Or you can adjust the Windows/curlink.h, to directly point to your respective Debug and Release static Curl libraries. Now, Xmlrpc-c should build using the Curl transport. Note, for the final linking, all libraries must be linked the same. A mixture of /MD and /MT will give big linkage problems. Any one project built with the alternate library will show many items defined more than once. And of course, you also cannot mix Debug with Release. That is /MDd with /MD, nor /MTd with /MT. Otherwise, there will be unresolved debug items.