Ошибка соединения 2019: передача аргумента CString между MFC и ATL

У меня есть два проекта:

  1. Project1: основанный на ATL COM проект, вывод которого - файл.lib (статическая библиотека)

  2. Project2: приложение GUI на основе MFC, которое связывается со статической библиотекой, чтобы можно было использовать функции в ней. \

В любом случае, файл.h соответствующего файла включается в проект1.

Теперь вызовы из Project2 в функции в Project1 происходят нормально, пока я не использую функцию, которая принимает CString в качестве параметра.

Всякий раз, когда есть вызов с CString в качестве параметра (который реализован в коде Project1), всплывает ошибка связи, в которой говорится, что она не может связаться с функцией.

При поиске в Google я обнаружил, что реализация CString в платформах ATL и MFC отличается. Таким образом, очевидным решением является передача CString, которая реализована для ATL из Project2, потому что Project1 основан на ATL.

Итак, я передаю CAtlString из Project2, когда я вызываю функцию. Но он возвращает мне ту же ошибку ссылки, и в ошибке он передает MFC-версию события CString, хотя я передаю CAtlString.

Может кто-нибудь дать мне решение, пожалуйста.

Более конкретные детали проекта я приведу ниже:

  1. Проект ATL - это проект ATL, основанный на COM, который имеет множество классов и функций. Выходные данные были установлены в файл.lib. Если какое-либо решение ссылается на этот файл.lib, оно может получить доступ ко всем методам, представленным в нем.

  2. Проект МФЦ - SD (Single Document). Чтобы быть более конкретным, если это вообще имеет значение для вас, приложение MFC предназначено для CPPUNIT (используется для модульного тестирования).

  3. IDE - Microsoft Visual Studio 2005 версии 8.0.50727.762 Я не знаю версий ATL и MFC (на самом деле я не знаю, как это проверить. Если бы вы также могли помочь здесь)

  4. Ошибка ссылки

    ошибка 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, из которого я вызываю функцию класса CClassInProject1TesterFunction_PTC01(void) - Функция в функции Project2 вызывается.

  5. Я могу вызвать все методы, которые не принимают CString в качестве аргумента в совершенстве. Я проверил их, и они работают просто отлично. Проблема возникает только тогда, когда у меня есть CString в качестве аргумента.

Пожалуйста помоги

Я перепробовал много решений, которые представлены в Stackru ранее. Никто из них не помог.

Примечание: я передаю CString по значению, а не по ссылке при вызове. Это вызов по значению.

0 ответов

Другие вопросы по тегам