以前有vs2013创建过dll动态库,今天想重新实现一下,发现还是有些问题。好记性不如烂笔头,记录一下,以便以后查阅。
1. 创建生成动态库项目
1.1 创建空的Dll项目:新建 >> 项目 >> visual C++ >> win32控制台程序 >> 空的项目>>完成。(选择空项目避免生成一些不需要的文件)
1.2 创建3个文件,分别为:makedll.h、makedll.cpp、dllmain.cpp。注意dllmian.cpp需要包含Windows.h头文件。3个文件内容如下:
makedll.h 文件内容:
#ifdef DLL_API
#else
#define DLL_API __declspec(dllexport)
#endif
DLL_API int MyAdd(int a, int b, int c);
(注意需要导出的函数、类、变量等的前面要加上DLL_API,不然使用的时候会报“无法找到外部依赖项”的错误)
#include "makedll.h"
int MyAdd(int a, int b, int c)
{
return a + b + c;
}
dllmain.cpp文件内容:
#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;
}
1.3 创建模块定义文件:source.def
内容为:
LIBRARY "makedll"
MyAdd @1
1.4 编译项目,得到目标dll和lib文件,默认再debug目录。
2. 使用动态库
2.1 创建win32控制台程序,讲makedll.h、makedll.lib、makedll.dll拷贝到某个目录,如F:/output目录。
testmain项目 >> 右键属性
VC++目录:
(包含目录为testdll.h所在的目录,库目录为lib dll所在目录)
C/C++:
(附加包含目录为dll lib所在目录)
链接器:
(附加目录为lib dll所在目录)
输入依赖项name:
2.2 添加测试代码testmain.cpp
#include "stdafx.h"
#include "makedll.h"
int _tmain(int argc, _TCHAR* argv[])
{
printf("hello MyAdd:%d\n", MyAdd(100, 50, 8));
return 0;
}
编译运行: