Связывание C++CLI-проектов приводит к неразрешенным токенам и внешним объектам.

У меня возникают трудности при связывании проектов C++ CLI.

В одном из моих проектов CLR у меня есть собственный базовый класс (содержащий управляемые методы и члены), который я пытаюсь наследовать подклассу в другом проекте. Компилятор выдает следующие ошибки:

error LNK2028: unresolved token (0A0000CE) "protected: bool __thiscall CWpfTemplateDlg::SetIsCloseButtonEnabled(bool)" (?SetIsCloseButtonEnabled@CWpfTemplateDlg@@$$FIAE_N_N@Z) referenced in function "protected: virtual class System::Windows::Controls::UserControl ^ __clrcall CTestWpf::InitWpfContent(void)" (?InitWpfContent@CTestWpf@@$$FMAMP$AAVUserControl@Controls@Windows@System@@XZ)  B:\Trunk\Edison\ForetagsplatsenCLR\ForetagsplatsenCLR.obj   ForetagsplatsenCLR

error LNK2019: unresolved external symbol "protected: bool __thiscall CWpfTemplateDlg::SetIsCloseButtonEnabled(bool)" (?SetIsCloseButtonEnabled@CWpfTemplateDlg@@$$FIAE_N_N@Z) referenced in function "protected: virtual class System::Windows::Controls::UserControl ^ __clrcall CTestWpf::InitWpfContent(void)" (?InitWpfContent@CTestWpf@@$$FMAMP$AAVUserControl@Controls@Windows@System@@XZ)   B:\Trunk\Edison\ForetagsplatsenCLR\ForetagsplatsenCLR.obj   ForetagsplatsenCLR

Проект, содержащий базовый класс, компилируется без проблем, генерируя файлы.lib,.dll,.exp и.pdb. Я связал проект, создав ссылку в "Общих свойствах", установив каталог включения и явно объявив.lib-файл в "Свойства конфигурации-> Линкер-> Ввод".

Вот код:

// Header
class CWpfTemplateDlg abstract : public CDialog
{
public:
   CWpfTemplateDlg::CWpfTemplateDlg( CWnd* pParent ) :
      CDialog( IDD_WPF_TEMPLATE_DIALOG, NULL )
   {
   }
   virtual CWpfTemplateDlg::~CWpfTemplateDlg()
   {
   }    

protected:
   virtual std::string GetCaption() = 0;
   virtual System::Windows::Controls::UserControl^ InitWpfContent() = 0;
   bool SetIsCloseButtonEnabled( bool enabled );

private:
   DECLARE_MESSAGE_MAP()
   BOOL OnInitDialog();
   afx_msg BOOL OnHelpInfo( HELPINFO* pHelpInfo );

protected:
   HWND m_wpfChild;
   gcroot<System::Windows::Interop::HwndSource^> m_hwndSource;
   gcroot<System::Windows::Controls::UserControl^> m_wpfControl;
};



// Cpp
bool CWpfTemplateDlg::SetIsCloseButtonEnabled( bool enabled )
{
    ...
}

BOOL CWpfTemplateDlg::OnInitDialog()
{
    ...
}

BOOL CWpfTemplateDlg::OnHelpInfo( HELPINFO* pHelpInfo )
{
    return TRUE;
}

BEGIN_MESSAGE_MAP(CWpfTemplateDlg, CDialog)
    ON_WM_HELPINFO()
END_MESSAGE_MAP()

И подкласс:

class CTestWpf : public CWpfTemplateDlg
{
public:
    CTestWpf( CWnd* pParent = NULL ) :
        CWpfTemplateDlg( pParent )
    {
    }

protected:
    System::Windows::Controls::UserControl^ InitWpfContent()
    {
        SetIsCloseButtonEnabled(false);
        System::Windows::Controls::UserControl^ wpfControl = nullptr;

        return wpfControl;
    }

    std::string GetCaption()
    {
        return "Caption";
    }
};

Есть ли кто-нибудь, кто знает, что происходит?


@Kratz

Да, я добавил путь к библиотеке.

/ VERBOSE не содержит ошибок, связанных с загрузкой файла lib.

Зависимость Уокер выдает мне следующие ошибки:

Ошибка: по крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в неявно зависимом модуле.

Ошибка: были найдены модули с разными типами ЦП.

Предупреждение. По крайней мере один модуль зависимости задержки и загрузки не найден.

Предупреждение: по крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в модуле, зависящем от задержки загрузки.

Первая ошибка говорит мне, что есть неразрешенные токены / внешние элементы (которые мы уже знаем по ошибкам в компиляторе).

Все мои проекты используют один и тот же тип платформы, поэтому я не уверен, почему я получаю вторую ошибку. Есть идеи?

"Модули зависимостей с задержкой загрузки" - не самая сильная моя область, поэтому я в значительной степени растерялся. Я получил общее представление о них, но я не понимаю смысл этого сценария. Может кто-нибудь объяснить, что происходит и как я могу решить проблему?

0 ответов

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