VS2017⽣成动态库.dll和静态库.lib及其调⽤VS2017⽣成动态库.dll和静态库.lib及其调⽤步骤
1.打开VS2017,新建动态链接库(DLL)
2.新建头⽂件–标头.h
头⽂件中先不⽤写内容
3.新建源⽂件–源.cpp
3.1 包含头⽂件
#include "stdafx.h"
#include "标头.h"
3.2 ⾃定义函数
int funAdd(int a,int b)mysql下载的vs库放在那个文件里
{
return(a + b);
}
源.cpp --源码如下:
#include "stdafx.h"
#include "标头.h"
int funAdd(int a,int b)
{
return(a + b);
}
4.打开头⽂件,添加如下语句(⾃⼰写的⾃定义的函数)
#ifndef _TESTDLL_H_
#define _TESTDLL_H_
__declspec(dllexport)int funAdd(int a,int b);
#endif
头⽂件中的 ifndef/define/endif 作⽤?
在⼀个⼤的软件⼯程⾥⾯,可能会有多个⽂件同时包含⼀个头⽂件,当这些⽂件编译链接成⼀个可执⾏⽂件时,就会出现⼤量重定义的错误。在头⽂件中使⽤#ifndef #define #endif能避免头⽂件的重定义。
⽅法:例如要编写头⽂件test.h
在头⽂件开头写上两⾏:
#ifndef _TEST_H
#define _TEST_H//⼀般是⽂件名的⼤写
头⽂件结尾写上⼀⾏:#endif
这样⼀个⼯程⽂件⾥同时包含两个test.h时,就不会出现重定义的错误了。
分析:当第⼀次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执⾏)#ifndef _TEST_H和#endif之间的代码,当第⼆次包含test.h时前⾯⼀次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和#endif之间的代码也就不会再次被包含,这样就避免了重定义了。主要⽤于防⽌重复定义宏和重复包含头⽂件。
5.菜单栏–⽣成–⽣成解决⽅案(F7)
⽣成成功后,右键解决⽅案在⽂件资源管理器中打开⽂件夹(⾃⼰新建项⽬时的路径),在Debug⽬录中就可以看到⽣成的.dll和.lib⽂件
6.接下来重新建⼀个空项⽬
7.把头⽂件(标头.h)和⽣成的.dll及.lib⽂件拷贝到【6】新建项⽬的⽂件夹中
在 源.cpp中添加内容如下:main函数中调⽤⾃定义函数
#pragma comment(lib,"TestDLL.lib")
#include <stdio.h>
#include "TestDLL.h"
int main()
{
int a =5, b =6;
int c =funAdd(a, b);
printf("c=%d", c);
getchar();
}
注:pragma comment(…)该指令将⼀个注释记录放⼊⼀个对象⽂件或可执⾏⽂件中。 常⽤的lib关键字,可以帮我们连⼊⼀个库⽂件。
和在⼯程设置⾥写上链⼊TestDLL.lib的效果⼀样(两种⽅式等价,或说⼀个隐式⼀个显式调⽤),不过这种⽅法写的程序别⼈在使⽤你的代码的时候就不⽤再设置⼯程settings了。告诉连接器连接的时候要TestDLL.lib,这样你就不⽤在linker的lib设置⾥指定这个lib了。
#pragma comment( comment-type [,“commentstring”] )
该宏放置⼀个注释到对象⽂件或者可执⾏⽂件。comment-type是⼀个预定义的标识符,指定注释的类型,应该是
compiler,exestr,lib,linker之⼀。commentstring是⼀个提供为comment-type提供附加信息的字符串,
Remarks:
1、compiler:放置编译器的版本或者名字到⼀个对象⽂件,该选项是被linker忽略的。
2、exestr:在以后的版本将被取消。
3、lib:放置⼀个库搜索记录到对象⽂件中,这个类型应该是和commentstring(指定你要Liner搜索的lib的名称和路径)这个库的
名字放在Object⽂件的默认库搜索记录的后⾯,linker搜索这个库就像你在命令⾏输⼊这个命令⼀样。你可以在⼀个源⽂件中设置多个库记录,它们在object⽂件中的顺序和在源⽂件中的顺序⼀样。如果默认库和附加库的次序是需要区别的,使⽤Z编译开关是防⽌默认库放到object模块。
4、linker:指定⼀个连接选项,这样就不⽤在命令⾏输⼊或者在开发环境中设置了。
8.Ctrl+F5
成功!
注:⽣成的.exe⽂件可直接运⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论