On 23 May 2014, at 11:31, Jean Baptiste Arnaud <[email protected]> wrote:
> I think this is because it is a C++ lib. > NativeBoost cannot be used with C++ lib. > It is a problem of call convention that is not the same from C to C++. > As I discuss with some people it seems be a complexe problem, each C++ > compiler seems have it own convention. > But Igor can maybe be more accurate about that. > A C wrapper to call C++, which should work. > Ronie’s SWIG for NativeBoost has some C++ support: http://forum.world.st/SWIG-for-Native-Boost-FFI-td4738511.html > On 23 May 2014, at 02:36, Torsten Bergmann <[email protected]> wrote: > >> Hi, >> >> as there was no responded so far I tried to track the problem deeper and did >> a short test >> client in C/C++ to verify if I can call WKHTMLTOPDF there and generate a PDF >> and to >> compare to the Pharo/NativeBoost client. >> >> Attached is the according CPP file which works and results in a PDF with the >> google >> homepage. >> >> I also additionally implemented the callback functions in the Pharo wrapper >> and >> using the error handling I noticed that the component returns "Failed >> loading page http:// ..." >> >> >> With that info I compared the C/C++ calls to the Pharo/NativeBoost calls >> more deeply and >> found out that in C/C++ the following call for an object setting works (by >> returning 1): >> >> >> // this returns 1 in C/C++ which is OK >> int a = wkhtmltopdf_set_object_setting(os, "page", >> "http://www.google.de"); >> printf("object set %i",a); >> >> >> while in Pharo the same call fails (by returning 0): >> >> "The following call failed and returns 0 instead of 1" >> self setObjectSetting: 'page' to: 'http://www.google.de' in: os. >> >> I checked how I wrapped this API call again and again - it is fine from my >> side: >> >> setObjectSetting: aName to: value in: settings >> >> <primitive: #primitiveNativeCall module: #NativeBoostPlugin> >> >> ^NBFFICallout stdcall: #(int >> wkhtmltopdf_set_object_setting(wkhtmltopdf_object_settings* settings, char* >> aName, char* value)) module: 'wkhtmltox.dll' >> >> and I still have no idea why it fails. >> >> Especially because "wkhtmltopdf_set_object_setting" function is not >> different from "wkhtmltopdf_set_global_setting" which is exactly the same >> way wrapped, works >> and returns 1 in exactly the same example. >> >> I would really appreciate if someone could have a second look... >> >> To reproduce on Windows: >> >> 1. Download the 32 bit version of WKHTML from http://wkhtmltopdf.org and >> install it >> 2. Copy the "wkhtmltox.dll" to either the folder of the VM executable >> or the Windows directory so it can be found >> 3. Load the package WKHTML2PDF-Core-TorstenBergmann.7 >> from http://smalltalkhub.com/#!/~TorstenBergmann/WKHTML2PDF into Pharo >> 3.0#30848 >> 4. Check the Transcript while evaluating: >> >> WKPDFLibrary example >> >> One can see that within this code #setObjectSetting:to:in: fails while >> #setGlobalSetting:to:in: >> works. >> >> Maybe I just do not see the obvious. Help is appreciated. Thanks in advance! >> >> bye >> T. >> >> >> <main.cpp> > > Best Regards > Jean Baptiste Arnaud > [email protected] > > > > > > >
