Логически, вы не можете обмениваться исходным кодом между C и C ++ с помощью конфликтующих объявлений для bool и связывать их между собой.
Единственный способ поделиться кодом и ссылкой - через промежуточную структуру данных. К сожалению, насколько я понимаю, вы не можете изменить код, который определяет интерфейс между вашей программой C ++ и библиотекой C. Если бы вы могли, я бы предложил использовать что-то вроде:
union boolean {
bool value_cpp;
int value_c;
};
// Заполнение может быть необходимым в зависимости от порядка байтов
В результате будет сделан тип данных одинаковой ширины на обоих языках; преобразование в собственный тип данных должно быть выполнено на обоих концах. Поменяйте местами использование bool для boolean в определении функции библиотеки, код скрипта в библиотеке для преобразования, и все готово.
Итак, вместо этого вам нужно создать shim между программой C ++ и библиотекой C.
У вас есть:
extern "C" bool library_func_1(int i, char c, bool b);
А вам нужно создать:
bool library_func_1_cpp(int i, char c, bool b)
{
int result = library_func_1(i, c, static_cast<int>(b));
return (result==true);
}
А теперь вместо этого вызовите library_func_1_cpp.