Я новичок в управляемом C ++.
У меня есть два управляемых проекта C ++ в одном .sln, Project Lib и Project LibTest. LibTest использует Lib.
Lib прекрасно компилируется и ссылки. Проект настроен как .dll.
LibTest также скомпилирован как .dll, но когда он переходит в линковку, я получаю «неразрешенный токен» на все методы Lib :: Эти определения методов определены в файле Lib .cpp.
Если я перенесу определения в файл Lib.h, все будет работать.
Я уже изменил Ссылку LibTest, чтобы она зависела от проекта Lib.
Чего мне не хватает?
РЕДАКТИРОВАТЬ : Хорошо, вот именно то, что у меня есть, и оно все еще не работает.
Прежде всего, я использую Visual Studio 2008 SP1.
Во-вторых, когда я делал подобное упражнение в C #, оно работало нормально.
Я создал пустой проект C ++ CLR. Я добавил проект Lib. Я добавил управляемый класс. VSTD генерирует Lib.h и Lib.cpp. Конструктор генерируется автоматически.
Затем я добавил еще один проект в свое решение; Я назвал это LibTest. Я добавил еще один управляемый класс под названием LibTest. LibTest.h и LibTest.cpp создаются. Я пытался создать экземпляр Lib в конструкторе LibTest, но при связывании он просто сказал:
1> LibTest.obj: ошибка LNK2020: неразрешенный токен (06000002) Lib ::. Ctor
Вот точный код:
Lib Project (скомпилированный как .dll проект)
//Lib.h
#pragma once
ref class Lib
{
public:
Lib(void);
};
//Lib.cpp
#include "Lib.h"
Lib::Lib(void)
{
}
Проект LibTest (скомпилирован как application.exe)
// LibTest.h
#pragma once
ref class LibTest
{
public:
LibTest(void);
};
// LibTest.cpp
#include "LibTest.h"
#include "Lib.h"
LibTest::LibTest(void)
{
Lib^ lib = gcnew Lib;
}
int main()
{
return 0;
}