Visual C++ 2010 生成并加载DLL动态链接库

来源:互联网 发布:天下为公我为母 知乎 编辑:程序博客网 时间:2024/05/17 03:26

 动态链接库的生成:      

  •  首先要看看官方网站给出的详细介绍如何  创建和使用dll动态链接库项目

  • 这个链接中将创建dll的项目和使用dll的项目放在同一个solution当中。这可能不是我们想要的情况。我们通常希望自己随意创建一个项目来利用现有的dll文件。那怎么办呢?这样就要用VC++的一般方法了,这里主要有如下几个步骤:
  1. 当你把VC++项目设置为DLL项目的时候,项目会自动定义一个宏(在C++/Preprocessor里):项目名__EXPORTS。例如:COMMUNICATER_103_EXPORTS
  2. 使用用上面的宏定义导出符号:
#ifndef COMMUNICATER_H   #define COMMUNICATER_H     //#include "ace/ACE_export.h"     #ifdef COMMUNICATER_EXPORTS   #define COMMUNICATER_API __declspec(dllexport)    #else   #define COMMUNICATER_API __declspec(dllimport)    #endif     class  Communicater  {  public:      COMMUNICATER_API Communicater(void);      COMMUNICATER_API virtual void run_collect() = 0;      COMMUNICATER_API virtual ~Communicater(void);  };    #endif  


 

动态链接库的加载

1   加载头文件 "fun.h"目录

这个添加目录的方法有三个地方:
http://blog.csdn.net/cppyin/article/details/6225596
http://blog.csdn.net/klarclm/article/details/7708549
http://www.cnblogs.com/lidabo/archive/2
http://blog.csdn.net/super_admi/article/details/8308708各种路径宏

1.附加路径 /I 选项;/I是由C/C++ -> General -> Additional Include Directories设置的;代码写成:#include "file.h"

2.系统路径 INCLUDE 环境变量表示;INCLUDE是由VC++ Directories -> Include Directories设置的;代码写成#include <file.h>


注意: 相对路径添加资源文件:相对路径的起点在项目文件夹里面(即source file的路径即.vcxproj所在路径),常用的路径包括:$(SolutionDir)

此宏定义包含了路径末尾的“\”,所以你一般会写:$(SolutionDir)lib\ (注意第一个路径之间没有\分隔符,但第二个有)

在以上2或者3其一中添加$(ACE_ROOT)这是为了让编译器找到ACE相关的头文件。

          2  加载动态链接库引入库文件 "fun.lib"目录和依赖项
在右边的“Library Directories"中添加$(ACE_ROOT)/lib
“右键项目名”--properties(或者点击菜单:“project”--“properties”)--"configurationg and properties"--”linker“--”input“--"additional dependencies" 输入lib文件全名fun.lib,这是为了让编译器构建项目时链接dll用于引导使用
    3 加载动态链接库文件 "fun.dll"

此文件和fun.lib放到同一个目录里即可。

注意:因为dll,lib文件可以是不同的编译器版本制作出来的,在运行时要求也不同。有些功能只需要1(boost中的lexical库等,因为这些库的实现就在源代码里面);有些需要2(比如boost中的regex等,这些库要求必须只用编译之后的lib库),有些库需要1、2、3(比如ACE、pocketSphinx,因为每次都使用编译器重新编译到代码中太浪费时间了。所以就编译好了包含lib,dll即可)

 


原创粉丝点击