Ошибка соединения 2019: передача аргумента CString между MFC и ATL
У меня есть два проекта:
Project1: основанный на ATL COM проект, вывод которого - файл.lib (статическая библиотека)
Project2: приложение GUI на основе MFC, которое связывается со статической библиотекой, чтобы можно было использовать функции в ней. \
В любом случае, файл.h соответствующего файла включается в проект1.
Теперь вызовы из Project2 в функции в Project1 происходят нормально, пока я не использую функцию, которая принимает CString в качестве параметра.
Всякий раз, когда есть вызов с CString в качестве параметра (который реализован в коде Project1), всплывает ошибка связи, в которой говорится, что она не может связаться с функцией.
При поиске в Google я обнаружил, что реализация CString в платформах ATL и MFC отличается. Таким образом, очевидным решением является передача CString, которая реализована для ATL из Project2, потому что Project1 основан на ATL.
Итак, я передаю CAtlString из Project2, когда я вызываю функцию. Но он возвращает мне ту же ошибку ссылки, и в ошибке он передает MFC-версию события CString, хотя я передаю CAtlString.
Может кто-нибудь дать мне решение, пожалуйста.
Более конкретные детали проекта я приведу ниже:
Проект ATL - это проект ATL, основанный на COM, который имеет множество классов и функций. Выходные данные были установлены в файл.lib. Если какое-либо решение ссылается на этот файл.lib, оно может получить доступ ко всем методам, представленным в нем.
Проект МФЦ - SD (Single Document). Чтобы быть более конкретным, если это вообще имеет значение для вас, приложение MFC предназначено для CPPUNIT (используется для модульного тестирования).
IDE - Microsoft Visual Studio 2005 версии 8.0.50727.762 Я не знаю версий ATL и MFC (на самом деле я не знаю, как это проверить. Если бы вы также могли помочь здесь)
Ошибка ссылки
ошибка LNK2019: неразрешенный внешний символ "public: __thiscall NamespaceInProject1::CClassInProject1::CClassInProject1(класс ATL::CStringT > >)" (??0CClassInProject1@NamespaceInProject1@@QAE@V?$CStringT@DV?$ $ StrTraitMFC_D ChTraitsCRT@D@ATL@@@@@ATL@@@Z) упоминается в функции "public: void __thiscall CClassInCPPUNITTester::TesterFunction_PTC01(void)" (??TesterFunction_PTC01@CTestsXPathParser@@QAEXXZ) ClassInCPPjITTester.
NamespaceInProject1
- Пространство имен, под которым класс объявлен в Project1CClassInProject1
- Класс в Project1, функции которого я тестируюCClassInCPPUNITTester
- класс в Project2, из которого я вызываю функцию классаCClassInProject1
TesterFunction_PTC01(void)
- Функция в функции Project2 вызывается.Я могу вызвать все методы, которые не принимают CString в качестве аргумента в совершенстве. Я проверил их, и они работают просто отлично. Проблема возникает только тогда, когда у меня есть CString в качестве аргумента.
Пожалуйста помоги
Я перепробовал много решений, которые представлены в Stackru ранее. Никто из них не помог.
Примечание: я передаю CString по значению, а не по ссылке при вызове. Это вызов по значению.