Visual Studio - 创建和使用动态库
一.VS2013 创建动态库
1.1 新建项目

1.2.在Win32应用程序向导对话框上勾选“DLL”和“空项目”复选框,点完成

1.3 .添加对应的.C文件和.h文件

1.4 在.h文件中添加如下代码
#define DLL_API __declspec(dllexport) //_declspec(dllexport):导出标志
最终的.h和.c文件如下:
seqlist.h
#ifndef __MY_SEQLIST_H__
#define __MY_SEQLIST_H__ #define DLL_API __declspec(dllexport) //_declspec(dllexport):导出标志 typedef void SeqList;
typedef void SeqListNode; // 创建线性表
DLL_API SeqList* SeqList_Create(int capacity); // 销毁线性表
DLL_API void SeqList_Destroy(SeqList *list); // 清空线性表
DLL_API void SeqList_Clear(SeqList *list); // 获得线性表的长度
DLL_API int SeqList_Length(SeqList *list); // 获得线性表的容量
DLL_API int SeqList_Capacity(SeqList *list); // 向线性表中插入一个元素
DLL_API int SeqList_Insert(SeqList *list, int pos); // 获取线性表中某一个位置的元素
DLL_API SeqListNode* SeqList_Get(SeqList *list, int pos); // 删除线性表中某一个位置的元素
DLL_API SeqListNode* SeqList_Delete(SeqList *list, int pos); #endif
seqlist.c
#include <stdio.h>
#include "seqlist.h" // 创建线性表
SeqList* SeqList_Create(int capacity)
{ return NULL;
} // 销毁线性表
void SeqList_Destroy(SeqList *list)
{ } // 清空线性表
void SeqList_Clear(SeqList *list)
{ } // 获得线性表的长度
int SeqList_Length(SeqList *list)
{
return ; // 长度暂时写成5,便于在使用动态库时进行测试
} // 获得线性表的容量
int SeqList_Capacity(SeqList *list)
{
return ;
} // 向线性表中插入一个元素
int SeqList_Insert(SeqList *list, int pos)
{
return ;
} // 获取线性表中某一个位置的元素
SeqListNode* SeqList_Get(SeqList *list, int pos)
{
return NULL;
} // 删除线性表中某一个位置的元素
SeqListNode* SeqList_Delete(SeqList *list, int pos)
{
return NULL;
}
1.5 点击菜单栏上的“生成”-“生成解决方案”,生成对应的dll及lib文件

1.6 如图,已成功生成了我们需要的seqlist.dll和seqlist.lib文件

二.VS2013 使用动态库
2.1 新建一个空项目:并将之前的头文件seqlist.h添加到头文件目录,然后进入该项目所在文件夹,在该文件夹下新建lib目录,并将刚才生成的seqlist.lib文件拷贝进去。



2.2 然后将生成的seqlist.dll文件放入到Debug目录下,编译器会自动搜索到这个文件,当然也可以放在系统目录下

接下来需要告诉编译器头文件所在的位置,引导库的位置和它的名字
2.3 右击项目项目名称“seqlistDemo”,选择“属性”

2.4 在弹出的菜单中,选择“VC++目录”

2.5 首先设置当前头文件所在目录

2.6 然后设置引导库的位置和名称
设置引导库的位置

设置引导库的名称

2.7 测试是否可以正常调用动态库中封装的函数
#include <stdio.h>
#include <stdlib.h>
#include "seqlist.h" int main()
{ printf("current nums is %d\n", SeqList_Length(NULL)); // 我们之前在动态库中将SeqList_Length()函数的返回的值固定为5
system("pause"); return ;
}

End
Visual Studio - 创建和使用动态库的更多相关文章
- 用Visual Studio创建集成了gtest的命令行工程
gtest代码库中的sample代码 在gtest的代码库中,包含了10个sample的代码,覆盖了gtest的常见用法,sample的代码位于以下文件夹: gtest\samples 由于gtest ...
- # 2017-2018-2 20155228 《信息安全系统设计原理》 使用VirtualStudio2008创建和调用静态库和使用VirtualC++6.0创建和调用动态库
使用virtual c++ 6.0创建和调用动态库 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一 ...
- 使用Visual Studio创建简单的自己定义Web Part 部件属性
使用Visual Studio创建简单的自己定义Web Part 部件属性 自己定义属性使用额外的选项和设置拓展你的Web part部件.本文主要解说怎样使用Visual Studio创建简单的自己定 ...
- 使用Visual Studio 创建新的Web Part项目
使用Visual Studio 创建新的Web Part项目 Web Part是你将为SharePoint创建的最常见的对象之中的一个.它是平台构建的核心基块. 1. 管理员身份打开Visual St ...
- 使用Visual Studio 创建可视Web Part部件
使用Visual Studio 创建可视Web Part部件 可视Web Part部件是很强大的Web 部件.它提供内置设计器创建你的用户界面. 本文主要解说怎样使用Visual Studio 创建可 ...
- 【翻译】使用Visual Studio创建Asp.Net Core MVC (一)
This tutorial will teach you the basics of building an ASP.NET Core MVC web app using Visual Studio ...
- Visual studio 创建项目失败vstemplate
Visual studio 创建项目失败 提示 the vstemplate file references the wizard class 'Microsoft.VisualStudio.WinR ...
- Xamarin 中Visual Studio创建项目提示错误
Xamarin 中Visual Studio创建项目提示错误 错误信息:Object reference not set to an instance of an object 出现这种情况,是由于没 ...
- Visual studio 创建文件时自动添加备注
Visual studio 创建文件时自动添加备注 描述 要求每回添加一个类,普通类或单元测试类文件头自动添加备注, 比如:Copyright, FileName, Author and so on. ...
随机推荐
- 【2-SAT】【并查集】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem
再来回顾一下2-SAT,把每个点拆点为是和非两个点,如果a能一定推出非b,则a->非b,其他情况同理. 然后跑强连通分量分解,保证a和非a不在同一个分量里面. 这题由于你建完图发现都是双向边,所 ...
- python3开发进阶-Django框架中form的查看校验方法is_valid()的源码,自定义验证方法
form表单的校验方法is_valid() 点开我们发现这个函数里面只有两个方法方法,最终返回True or False 我们点进.is_bound属性,里面判断传输的数据不是空和上传文件不是空 点进 ...
- Problem B: 调用函数,求1!+2!+3!+......+10!
#include<stdio.h> double fact(int i); int main() { int i; ; ;i<=;i++) sum=sum+fact(i); prin ...
- Java高级架构师(一)第05节:TortoiseGit的本地使用
- 通过UIImagePickerController选取的图片名称信息
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDic ...
- iOS应用程序多语言本地化
多语言在应用程序中一般有两种做法:一.程序中提供给用户自己选择的机会:二.根据当前用户当前移动设备的语言自动将我们的app切换对应语言. 第一种做法比较简单完全靠自己的发挥了,这里主要讲第二种做法,主 ...
- SqlServer_合并多个递归查询数据(CTE)
该方法在数据量过大时,效率过低,可参考hierarchyid字段实现(Sqlserver 2008) 优点:效率较高 缺点:需要不断维护数据,对现有业务有一定影响 参考:http://www.cnbl ...
- jquery给input标签添加data-options属性
//原生JS实现document.getElementById('startPrice').setAttribute("data-options", "required: ...
- 初识JdbcTemplate
1.spring配置文件里注冊:參照使用 Spring jdbcTemplate 进一步简化 JDBC 操作 2.写javabean 3.写rowmapper(依据javabean来封装结果集) 4. ...
- 创建 git仓库
首先创建一个文件夹作为git仓库,创建一个test文件夹,并在文件夹下创建一个test.c的文件用以测试: git init git使用git init来初始化一个git仓库,git的很多命令都是在g ...