window平台下动态库与静态库生成与使用(C++)
动态库
动态库的生成
vs的设置自行百度,废话不多讲,上代码:
代码参考:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29121609&id=3851844
//add.h
#pragma once;
//该宏完成在dll项目内部使用__declspec(dllexport)导出
//在dll项目外部使用时,用__declspec(dllimport)导入
//宏DLL_EXPORT在add.cpp中定义
#ifdef DLL_EXPORT
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
namespace test
{
//导出类
class DLL_API SimpleDll //在要导出的类或函数前面添加相应的操作
{
public:
SimpleDll();
~SimpleDll();
int add(int x, int y); //简单方法
};
}
//------------------ add.cpp ----------------
//注意此处的宏定义需要写在#include "add.h"之前
//以完成在dll项目内部使用__declspec(dllexport)导出
//在dll项目外部使用时,用__declspec(dllimport)导入
#define DLL_EXPORT
#include "add.h"
namespace test
{
SimpleDll::SimpleDll()
{
}
SimpleDll::~SimpleDll()
{
}
int SimpleDll::add(int x, int y)
{
return x + y;
}
}
// dllmain.cpp : 定义 DLL 应用程序的入口点。
//#include "stdafx.h"
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
动态库的使用
拷贝头文件、生成的lib与dll文件
VS设置相关的路径
- 和正常的一样使用
动态库的调试
- 进入dll工程文件配置界面。
- 设置Debugging中的command为调用此dll的exe程序。
- 将dll设置为启动项目启动
- 此时可以直接对dll中的函数进行调试
静态库
- 静态库相对简单,直接将项目设置为Static library (.lib)
- 然后就没有然后了,编译生成即可.注意是否需要兼容c,若要则添加相应的条件编译选项(extern “C”)