У меня есть 2 проекта на C ++ (MFC)
Один — это библиотечный проект, который я использую во втором (исполняемый).
Они прекрасно работают вместе, пока я не вызову функцию из обычного проекта, которая принимает CString в качестве аргумента. Я получаю ошибку компоновщика, как это
error LNK2019: unresolved external symbol "public: void __thiscall
CTextDisplay::SetText1(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,
class ATL::ChTraitsCRT<wchar_t> > >)" (?SetText1@CTextDisplay@@QAEXV?$CStringT@_WV?
$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) referenced in function
"public: void __thiscall CManualPane::SetBeadCountFor(int,double)"(?SetBeadCountFor@CManualPane@@QAEXHN@Z) C:\source\IQ-Project\IQ\ManualPane.obj IQ
Исполняемый проект имеет свой набор символов UNICODE, но в библиотеке для него установлен набор многобайтовых параметров чата. Я действительно не могу изменить их, не получив смешного количества ошибок.
Какие-либо предложения?
Изменить. Причина, по которой у нас разные настройки в этих двух проектах, заключается в том, что исполняемый проект — это в основном внешний проект, который моя группа не создавала или не создавала. Мы просто должны были внести это и использовать. Проект библиотеки — это то, над чем мы все работаем пару лет.
Когда вы включаете заголовки проекта библиотеки в исполняемый файл, скорее всего, есть typedef, который используется в объявлении функции. Поскольку исполняемый файл использует UNICODE, объявление теперь находится в UNICODE. Однако реализация библиотеки все еще находится в MultiByte, поэтому определение не соответствует объявлению, приводящему к ошибке компоновщика.
Посмотрите, как настраиваются эти typedef, и вы можете сделать некоторые специальные #define, #undef вокруг включенного заголовка.
В конце концов, оказалось, что лучше избегать использования однотипных и многобайтовых проектов в одном решении, поэтому я переместил все это в юникод и пошел оттуда