您的位置:首页 > 其它

创建自己的dll和lib文件

2009-04-23 15:47 288 查看
经常使用到第三方库。比如:glut,freetype,sdl,大一点的有CEGUI,OSG等。

这些库虽然是开源的,但是很多时候只是使用他们,一般不会去修改。

使用就会涉及到三个东西:.h  .lib  .dll文件。

主要有三种模式:

.h+.lib       

.h+.lib+.dll

.dll

 

第二种是最常见的,其他两种都比较少

 

一,下面自己实现一个dll和lib:

英文链接网址:http://msdn.microsoft.com/en-us/library/ms235636(VS.80).aspx

 

注意我的编译器是vs2005。

 

1,建立一个win32控制台应用程序, 输入工程名字后点击 确定 点击下一步, 选择应用程序类型: DLL  附加选项选择:空项目 。点击确定

2,在空的工程中添加头文件MathFuncsDll.h ,内容如下:

// MathFuncsDll.h

namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);

// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);

// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);

// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}


3,添加MathFuncsDll.cpp文件内容如下:

// MathFuncsDll.cpp
// compile with: /EHsc /LD

#include "MathFuncsDll.h"

#include <stdexcept>

using namespace std;

namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}

double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}

double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}

double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}

return a / b;
}
}


4, 设置工程属性:

 左边解决方案资源管理器中右击工程名:弹出的对话框中:左边,配置属性:/ 常规 下: 右边 配置类型:选择 动态库(.dll)

然后点击生成:/ 生成 MathFuncDll。

 

此时可以到debug文件夹下去查看一下: MathFuncsDll.dll MathFuncsDll.lib 这两个文件是我们最关心的。注意此时的MathFuncsDll.lib文件只有3kb大

 

二,使用dll和lib文件

新建一个空的win32控制台应用程序:UseMathDll项目名字

 添加cpp文件MyExecRefsDll.cpp:

#include <iostream>

#include "MathFuncsDll.h"

#pragma comment(lib , "MathFuncsDll.lib") //导入lib文件

using namespace std;

int main()
{
double a = 7.4;
int b = 99;

cout << "a + b = " <<
MathFuncs::MyMathFuncs::Add(a, b) << endl;
cout << "a - b = " <<
MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
cout << "a * b = " <<
MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
cout << "a / b = " <<
MathFuncs::MyMathFuncs::Divide(a, b) << endl;

system("PAUSE");
return 0;
}


然后将MathFuncsDll.lib  和 MathFuncsDll.h文件 放到和MyExecRefsDll.cpp一个文件目录下,也就是当前目录下。将MathFuncsDll.dll可以放到system32下,当然了最简单的做法就是放到UseMathDll这个工程的debug或者release文件夹里面,将来生成的exe就可以直接在当前目录下找到需要的dll文件。

此时就可以点击运行了:

结果如下:

a + b = 106.4
a - b = -91.6
a * b = 732.6
a / b = 0.0747475
请按任意键继续. . .


 

三,直接使用.h 和 lib文件

还是打开MathFuncsDll工程项目,依照条目一中的设置工程属性:不过最后的配置类型 选择 静态库(.lib)

然后生成MathFuncsDll,然后到debug下面看一下,此时的MathFuncsDll.lib文件变成了29k

然后把MathFuncsDll.lib替换掉UseMathDll工程目录下的原来的MathFuncsDll.ib文件,而且把Debug下的MathFuncsDll.dll删掉,UseMathDll照样正常运行。

OK,That is all.

Hope will be helpful for you
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dll 编译器 system exe class