2009-10-13 67 views
0

好吧,我想将一些项目转换成DLL。这些都是Visual Studio 2008项目,都是用C++编写的。建立多个项目的DLL的正确方法?

我们有9个不同的项目(所有在Visual Studio 2008下的解决方案)。例如:

RasterTools\ 
RasterDataset.h 
RasterDataset.cpp 
Point.h 
Point.cpp 
<... insert like 50 more cpp files ...> 

CoreTools\ 
Image.h 
Image.cpp 
CoreUtilities.h 
CoreUtilities.cpp 
<... insert more ...> 

<... insert 7 or more projects ...> 

现在事情是某些项目使用其他项目的类。例如Image.h使用Point.h,CoreUtilities.h有一些处理Points的函数。当你有多个交织在一起的项目时,建立一个DLL的正确方法是什么?

基本上我们要具备以下条件:

CoreTools.dll 
RasterTools.dll 
<other projects.dll> 

我知道如何处理__declspec(dllexport)的和dllimport的罚款,通过宏。但是,当我试图构建例如CoreTools.dll我得到的链接器错误,我曾经使用过一个类或没有包含在该项目中的功能。例如,当构建coreTools.dll时,我得到任何Point Class函数的链接器错误。

我该如何处理?

编辑

我想这一点,基本上我注意到,自循环依赖的结果几乎所有的复选框被变灰。 :(

回答

3

如果在其抛出窗口的链接器错误,选择项目右键单击“项目依赖项...”,你会看到所有其他项目的列表中您的解决方案。

检查框(DLL)项目旁边,Visual Studio会自动链接到它(并确保依赖关系在客户端之前建立)

2

对于您构建的每个DLL,您还应该构建一个LIB。 B(B.DLL)引用项目A(A.DLL)中的条目,然后Project A首先创建,它创建A.DLL和A.LIB,然后Project B可以将A.LIB添加到可选链接库以解析其引用那么依赖于B.DLL的C.DLL可以包括de在链接步骤B.LIB等等等等。

至少这是在非常低会发生什么情况,建立/制作水平。如同leegent所暗示的那样,如果你选择了正确的项目依赖关系,开发环境可能为你做所有这些工作。

1

如果你有你的DLL之间循环依赖,你必须只使用代码从下面的水平在一定水平走动的东西,所以你得到分层的DLL,每个DLL来解决这些问题。