Inspired by David Byron's recent successful tackling of libpurple use from MSVC, I decided to give the entire compilation of libpurple in Visual Studio a try (in order to build with debuggable symbols). After a few hours at it, I have gotten it to compile and work (mostly... more on this later) with the nullclient program. Surprisingly, I only had to make a few slight modifications in code (patches attached) to deal with compiler idiosyncracies, although I am not sure that all of these are the right thing to do. In order to export all of the required symbols, functions have to either be marked for export, or a .def file must be provided specifying functions to export. I am doing the latter, using the .def file produced by the compile under cygwin/MinGW.
<br><br>The problem: I am experiencing a crash in purple_util_write_data_to_file in util.c  when the nullclient program tries to save the buddy list. It appears that g_fopen (ln 2431) returns a non-null FILE*, but the internal members of this are not valid. Then when it is used in fwrite (ln 2443) it blows up.
<br><br>My method:<br><br>1. Create an empty dll project<br>2. Add version.h, and config.h from pidgin root<br>3. Add all .c and .h from libpurple directory (except purple-client* files)<br>4. Add libpurple\win32 directory (only need .c, .h, and .rc files)
<br>5. Apply attached patches (1 for libpurple, and 1 for win32 directory)<br><br>My Visual Studio Project Properties:<br><br>C/C++::General::Additional Include Directories:<br>------------------------------------------------
<br>$PIDGIN_DEV_ROOT\win32-dev\gtk_2_0\include\glib-2.0<br>$PIDGIN_DEV_ROOT\win32-dev\gtk_2_0\lib\glib-2.0\include<br>$PIDGIN_DEV_ROOT\win32-dev\gtk_2_0\include<br>$PIDGIN_DEV_ROOT\win32-dev\libxml2\include<br><br>C/C++::Advanced::Force Includes:
<br>------------------------------------------------<br>winsock2.h; config.h<br><br>Linker::General::Additional Library Directories:<br>------------------------------------------------<br>$PIDGIN_DEV_ROOT\win32-dev\gtk_2_0\lib
<br>$PIDGIN_DEV_ROOT\win32-dev\libxml2\lib<br><br>Linker::Input::Additional Dependencies:<br>------------------------------------------------<br>glib-2.0.lib<br>gmodule-2.0.lib<br>gobject-2.0.lib<br>gthread-2.0.lib<br>libxml2.lib
<br>intl.lib<br>iconv.lib<br>ws2_32.lib<br><br>Linker::Input::Module Definition File:<br>------------------------------------------------<br>libpurple.def (generated by the mingw compile)<br><br>Resources::General::Additional Include Directories
<br>------------------------------------------------<br>..<br><br><br>If anyone is interested, I can supply my project files (although there should be enough here to reproduce them). This was done in the interest of pursuing the development of a native UI for windows.
<br><br>-Nick Hebner<br>