I am a very inexperienced programmer, so apologies if this is a stupid question to be asking. And similarly, if anyone answering could assume that I know basically nothing at all and treat me like an idiot, that'd be great...
I have some code in C++ that is an interface to a physical device. Importantly, part of this is writing images to the device by assigning pixel values for a 512x512 array of pixels, with these values stored using the C++ vector class. The values are written into this by using a pointer that is incremented, and dereferencing the pointer to assign the value.
I also have some code that I've written in C, that calculates what image to actually write. (The code uses Fourier transforms, for which I've used the FFTW library). What I want to do is this: every time in the C++ code I want to write an image to the device, I want to call this C code to calculate what image to write, and get the output of the C code into the C++ code.
My C data has the following form (if I've understood correctly): I have a pointer of type fftw_complex and what I presume is a 1D array of size 512x512x2 (as s=512, and fftw_complex must have size 2 as it's for storing a complex number). In case I've got that wrong, here's the declaration / memory allocation:
fftw_complex *slmPlane
slmPlane = (fftw_complex*) fftw_malloc(s*s * sizeof(fftw_complex));
My C code is not C++ compatible. I have arrays defined with sizes given by variables, and there are a lot of issues. I don't have the experience, or really the time, to make this code compile and run with C++. I've seen a lot of articles on calling individual C functions from C++... but what I want to do is call a whole separate bit of code, which is a main function plus about 50 others. And I don't want to have to worry about making the C code C++ compatible.
Ultimately, then, what I need to know is:
Is there an easy way to call a separate piece of code with .c extension, that's not C++ compatible, from withing a C++ (.cpp file) script?
How can I get the output of the C code (a 1D array of length 512x512x2) into the C++ code (where it will be assigned to elements of a vector)?
As a bonus - any issues with linking different libraries from each of these two scripts? (I'm using C libraries that might not be C++ compatible, and vice versa..)
If I'm going about all of this totally the wrong way, could anyone point me in a better direction instead?
...which is a main function plus about 50 others.
If your C code is a standalone executable, and can output to stdout or an arbitrary file, you could simply fork and exec (or spawn) it from the C++ code, and have the C++ code capture the output or read the file. – 8bittree Jun 1 at 13:19