none
求助:一个非常非常基础的问题,一个 Win32 Console Application 如何引用一个 Win32 Dll RRS feed

  • 问题

  • 我建立了一个空的解决方案,然后在里面添加一个 Win32 Probject 项目,命名为 “Lib”。在 Win32 Application Wizard 里面,Application Type 选择 Dll。 接着我向其中添加了一个 CTest 的类。

    接着我再添加一个 Win32 Console Application, 命名为 “Console”。

    现在我希望在 Console 项目里面,能够用到 Lib 定义的 CTest 类,而且希望调试 Console 项目的时候,能够跟踪进 Lib 项目。请问应该怎么做呢?

    呃,我知道这个问题很基础的啦,希望各位高手在大笑之余不吝指点一下,多谢。

    2010年1月21日 2:34

答案

  • 问题挺好的,首先在Lib工程中声明CTest的头文件中添加__declspec( dllexport ) 
    就是class CTest{
    变为class __declspec( dllexport )  CTest{
    编译后会生成一个Lib.lib的文件。
    你需要使Console工程联接时可以看到这个lib文件和dll文件。
    也就是把它放到编译路径下,编译Console的debug版本放到Console的debug目录下。编译Console的release版本放到Console的release目录下。
    另外还需要让CTest.h文件可以被Console编译时看到。
    那么需要在Console的目录中添加这个文件。
    并且在用到的文件中添加#include "CTest.h"
    编译Console工程应该是可以通过的。
    Debug的时候需要保证Lib工程也是debug编译的。
    调试CTest的时候,需要指定一下CTest.cpp的目录,之后就可以直接跟踪了。
    以上是最简单的隐式调用方法。另外还有显式调用方法。这里就不作介绍了。


    麻烦把正确答案设为解答。
    • 已标记为答案 IGabriel 2010年1月22日 2:27
    2010年1月21日 2:57
    版主

全部回复

  • 问题挺好的,首先在Lib工程中声明CTest的头文件中添加__declspec( dllexport ) 
    就是class CTest{
    变为class __declspec( dllexport )  CTest{
    编译后会生成一个Lib.lib的文件。
    你需要使Console工程联接时可以看到这个lib文件和dll文件。
    也就是把它放到编译路径下,编译Console的debug版本放到Console的debug目录下。编译Console的release版本放到Console的release目录下。
    另外还需要让CTest.h文件可以被Console编译时看到。
    那么需要在Console的目录中添加这个文件。
    并且在用到的文件中添加#include "CTest.h"
    编译Console工程应该是可以通过的。
    Debug的时候需要保证Lib工程也是debug编译的。
    调试CTest的时候,需要指定一下CTest.cpp的目录,之后就可以直接跟踪了。
    以上是最简单的隐式调用方法。另外还有显式调用方法。这里就不作介绍了。


    麻烦把正确答案设为解答。
    • 已标记为答案 IGabriel 2010年1月22日 2:27
    2010年1月21日 2:57
    版主
  • 非常感谢SplendourG版主的解答。

    我还想问多个问题。 我在 Codeproject 上面找到了一个 Library,很想用它,地址如下:
    Genetic Algorithm Library
    http://www.codeproject.com/KB/recipes/geneticlibrary.aspx

    在这篇文章给出的例子里面,发觉它的引用方式跟你介绍的不一样,是把 Library 作为 Reference 添加进去的。但是我无法重现。

    是否也能够介绍一下这种引用方式?

    2010年1月21日 6:48
  • 你可以用描述的Method 2 来添加。


    麻烦把正确答案设为解答。
    2010年1月21日 8:20
    版主
  • 你可以用描述的Method 2 来添加。


    麻烦把正确答案设为解答。
    了解, 谢谢
    2010年1月22日 2:26