From: gga <gg...@ad...> - 2007-04-12 01:13:16
|
David Simas wrote: > I'm using SWIG to build a Ruby (1.8.4) interface to some C++ libraries > on Linux (CentOS 4.1) with GCC 3.4.5. One of the C++ functions I'm > wrapping uses a reference to pass back a value to the caller as a side > effect: > > ErrorHandle* DetectInvisibleWatermark(const char *inputfilename, > const char *wmfilename, > float horizOffset, > float vertOffset, > float lowPassFilterFactor, > float &modulationStrength, > const char *key, const char *seed, > const char *outfilename); > You should do the following: // This file includes typemaps to map int, float, doubles, and other // common C/C++ types to the current swig language. // // Special typemaps for the "variables" IN, OUT, and INOUT are created, // which will mark pointers or references to be an input/output // parameters or both. // // Look in the 1.3 docs about typemaps. Its documentation is all // over the place, so read the ruby comments about it, the C comments // about it and the Ocalm comments about it. // %include <typemaps.i> ErrorHandle* DetectInvisibleWatermark(const char *inputfilename, const char *wmfilename, float horizOffset, float vertOffset, float lowPassFilterFactor, float & OUTPUT, const char *key, const char *seed, const char *outfilename); The function will then take one less argument, as it was marked as OUTPUT, and it will return two values instead of one. First, the ErrorHandle class and then the float value. You should use a latest version of swig for this to work properly on ruby (1.3.2). P.S. What's Sony up to these days watermarking stuff? -- Gonzalo Garramuño gg...@ad... AMD4400 - ASUS48N-E GeForce7300GT Kubuntu Edgy |