【发布时间】:2018-10-01 09:47:48
【问题描述】:
我是托管 C++ 的新手。
我在一个 .sln 中有两个托管 C++ 项目,Project Lib 和 Project LibTest。 LibTest 使用了 Lib。
Lib 编译和链接正常。项目设置为 .dll。
LibTest 也被编译为 .dll,但是当它进入链接时,我在所有 Lib::methods 上都得到“未解析的令牌”。这些方法定义在 Lib .cpp 文件中定义。
如果我将定义移到 Lib.h 文件中,一切正常。
我已经修改了 LibTest 的 Reference 以依赖于 Lib 项目。
我错过了什么?
编辑:好的,这正是我所拥有的,但它仍然无法正常工作。
首先,我使用的是 Visual Studio 2008 SP1。
其次,当我在 C# 中进行类似的练习时,它运行良好。
我创建了一个空的 C++ CLR 项目。我添加了一个 Lib 项目。我添加了一个托管类。 VSTD 生成 Lib.h 和 Lib.cpp。构造函数是自动生成的。
然后我在我的解决方案中添加了另一个项目;我称它为 LibTest。我添加了另一个名为 LibTest 的托管类。生成 LibTest.h 和 LibTest.cpp。我试图在 LibTest 构造函数中实例化 Lib,但在链接过程中它只是说:
1>LibTest.obj : 错误 LNK2020: 未解析的令牌 (06000002) Lib::.ctor
这是确切的代码:
Lib 项目(编译为 .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;
}
【问题讨论】:
-
哇..我必须说..来自非托管 C++..我一直希望开发环境(在本例中为 VSTD IDE)来管理#include,以及所有没有我的库链接必须明确指定它。这真是太神奇了!我想告诉整个非托管 C++ 世界! (我只落后了 6 年!=p)
标签: managed-c++