i need to write a library in c++ , usable by client to do some operations in a remote server. The only thing in the specific i haven't done yet it's: The c++ library need a C interface. Let me explain better: From client using this lib i need to do call something like: int operation(void* addr); if int<0 error and so.. But the library it's a class in c++. So my answer is.. Need I a global variable holding the instance of class in the library? The are some better option to develop this C interface of C++ class?
Thx in advice for answer.
The C Standard Library is a set of C built-in functions, constants and header files like <stdio.h>, <stdlib.h>, <math.h>, etc. This library will work as a reference manual for C programmers. The C Standard Library is a reference for C programmers to help them in their projects related to system programming.
The main benefit of using a library is that the code in the main program is much shorter. To compile the library, type the following at the command line (assuming you are using UNIX) (replace gcc with cc if your system uses cc):
To compile the library, type the following at the command line (assuming you are using UNIX) (replace gcc with cc if your system uses cc): gcc -c -g util.c The -c causes the compiler to produce an object file for the library. The object file contains the library's machine code.
C++ client can use C-style API interface. On the other hand, you you prefer C++, it is necessary to have C wrapper for C clients. Share Improve this answer Follow answered Oct 12 '10 at 7:07 Alex FAlex F 40.1k3838 gold badges138138 silver badges203203 bronze badges 5 1
You can use the PIMPL idiom in the C wrapper. You provide a method YourClass_Create
that internally calls the constructor (using new
) and returns the pointer to your class instance; for the client code this will be just an opaque handle (it may be a typedef
for void *
), to be passed to every function of your C interface to specify on which instance it has to work (just like FILE *
in stdio
).
All these functions will have to do is to call the corresponding method on the handle (converted back to a pointer to your class) and translate exceptions to error codes.
As @jdv-Jan de Vaan pointed out in his comment, don't forget the necessary #ifdef
ed extern "C" {}
around your C wrapper code, otherwise you may get linker errors.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With