创建自己的dll和lib文件 .

经常使用到第三方库。比如: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照样正常运行。

 

你可能感兴趣的:(创建自己的dll和lib文件 .)