Если у вас есть возможность изменить вашу библиотеку, вы можете использовать потоки C ++ вместо потоков C FILE.
Если ваша старая библиотечная функция выглядела так:
void SomeFun(int this, int that, FILE* logger) {
... other code ...
fprintf(logger, "%d, %d\n", this, that);
fputs("Warning Message!", logger);
char c = '\n';
fputc(c, logger);
}
, вы можетезамените этот код на:
void SomeFun(int this, int that, std::ostream& logger) {
... other code ...
logger << this << ", " << that << "\n";
// or: logger << boost::format("%d %d\n") %this %that;
logger << "Warning Message!";
char c = '\n';
logger.put(c);
// or: logger << c;
}
Затем в своем небиблиотечном коде сделайте что-то вроде:
#include <sstream>
std::stringstream logStream;
SomeFun(42, 56, logStream);
DisplayCStringOnGui(logStream.str().c_str());