У меня есть проект, в котором используются две сторонние библиотеки, оба из которых используют TCHAR в своих файлах заголовков. К сожалению, одна библиотека выполняется как многобайтная (назовите ее библиотекой a), а другая скомпилирована как Unicode (назовите ее библиотекой b).Обработка TCHAR в файлах заголовков для библиотек с разными наборами символов
Теперь, как я понимаю, TCHAR заменяется прекомпилером либо wchar, либо char в зависимости от вариантов сборки. Поэтому, когда библиотека a была скомпилирована, любой метод, который принимает параметр типа TCHAR, должен был ожидать параметра типа char, а методы в библиотеке b заданы для ожидания параметра типа wchar.
К сожалению, мое потребительское приложение также должно выбрать набор символов. Если я выберу Unicode, то заголовочный файл, который я включил для библиотеки a, говорит мне, что метод хочет wchar, потому что когда я компилирую TCHAR в заголовке, они интерпретируются как wchars. Это включает в себя TCHARS, определенные внутри структур. Я подтвердил это поведение на практике, когда я выделяю и передаю буфер TCHAR, я возвращаю мусор, потому что он заполняет мой буфер wchar многобайтовыми данными.
Мои вопросы: есть ли чистый способ использовать обе эти библиотеки в одном приложении? Возможно, я что-то не так сработал с тем, как я использую эти библиотеки?
Спасибо за ваш ответ, это направление, в котором я склоняюсь. Я собираюсь выйти на конечность и спросить, что может быть глупым вопросом. В чем преимущество наличия оболочки или просто редактирования файла заголовка для библиотеки, чтобы он соответствовал скомпилированным определениям структур и экспортированных функций? Я представляю, что это в основном так же просто, как и поиск и замена TCHAR. Я упрощаю это? – MichaC
xtofl указывает на одно преимущество ниже: вы можете конвертировать в и из нескольких байтов в обертке. Полагаю, меня больше интересует обратная связь о том, будет ли поиск/замена работать. – MichaC
Замена TCHAR с char/wchar_t в файле заголовка библиотеки будет работать только до тех пор, пока вы замените ВСЕ их, включая файлы заголовков, включенные через #include в файлы заголовков библиотеки. Зависит от вашей библиотеки, которая может содержать некоторые стандартные/системные файлы. Другой недостаток - когда вы получаете новую версию библиотеки, что вы делаете?Поиск и замена снова? –