Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing std::string in a library API

Tags:

c++

std

stl

We are currently building an API for a certain library. Part of the interface requires the library to get and return to the user classes such as vector and string.

When trying to simulate use of the library in a simple scenario, in debug mode the system crush when delivering a string as an input.

I believe there is a different representation of the string class in debug or release mode. Then our library assumes to receive a certain representation, read a data member incorrectly and crush along the way. So what is the best way method to transferring STL objects in an API. The target OS is windows XP compiled with MSVC 8, although the library user will use windows their compiler might (and probably will) be different Ideas we had so far:

  1. Change string to char* - But then developers might be baffled with the responsibility of releasing the memory.
  2. Use our own version of String – I don't want to develop another private implementation of string.
  3. Release to the user debug version and release version.
  4. Ask people on Stack overflow for some option we miss or don’t understand, or just hear from their experience - done.
like image 606
Hagai Avatar asked Dec 13 '22 21:12

Hagai


1 Answers

It's not unreasonable at all to make people link against debug in debug mode, and release in release mode. That is how virtually every library does it. Even huge projects like DirectX release debug compiles of their binaries. #3 is a perfectly reasonable option/solution.

like image 97
Puppy Avatar answered Dec 28 '22 20:12

Puppy