您的位置:首页 > 编程语言

把一些重要的代码编译成Lib或者dll

2011-05-13 16:41 344 查看
1. 对于一些重要代码 可以编译成dll或者lib, 然后提供给其他人使用和自己使用

1.1 lib 在VS2008中很简单, 就是创建一个Win32 DLL或者其他的DLL工程, 在
 Property | Configuration Properties | General | Configuaration Type 中选择Static Library(.lib)
 编译即可生成lib
 
 对于使用者, 包含对应的头文件(函数, 类等声明),
 在对应的地方输入类似下面的语句或者在对应的位置设置lib 就可以了.
 #ifdef _DEBUG
 #pragma comment(lib, "../Debug Static/ThreadPool.lib");
 #else
 #pragma comment(lib, "../Release Static/ThreadPool.lib");
 #endif

 得到lib后, 使用者连接lib时有时会报一堆连接错误, 这是lib的工程选项与使用者的工程选项不一致造成的
 主要选项有:
 a. Property | Configuration Properties | C/C++ | Code Generation | Rumtime Library  你可以根据情况选择对应的选项, 
 b. Property | Configuration Properties | General | Use of MFC 你可以根据需要选择对应的选项
 由于生成lib时工程是Win32 Lib (本人比较喜欢这个), 所以默认选项就是 Use Standard Windows Libraries
 但在Win32 Lib中也可以使用MFC的一些类的 例如CString, 那你就要选择Use MFC in a Shared DLL或者Use MFC in a Static DLL了
 当你选择了这个的时候, a选项可能会有问题, b选项选择了MFC, a选项必须选MD了 (不能选MT).
 
1.2 对于dll
 导出类:
 // point.h文件
 #pragma once
 #ifdef DLL_FILE
 class _declspec(dllexport) point  //导出类point(DLL要导出类)
 #else
 class _declspec(dllimport) point  //导入类point(使用者要导入类)
 #endif
 {
 public:
  float y;
  float x;
  point();
  point(float x_coordinate,float y_coordinate );
 };

 // point.cpp文件
 #define DLL_FILE
 #include "point.h"
 
 使用者只要包含对应的头文件和下面这些, 还有运行的时候需要对应的dll文件.
 #ifdef _DEBUG
 #pragma comment(lib, "../Debug Static/ThreadPool.lib");
 #else
 #pragma comment(lib, "../Release Static/ThreadPool.lib");
 #endif
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息