一、VS创建动态链接库

1、打开vs新建项目 创建动态链接库

2、添加头文件.h,在h文件中添加如下内容:

#pragma once//该头文件只编译一次
#include<iostream>
#include<vector>
#include<string>
using namespace std;
__declspec(dllexport) int test(int, int);
__declspec(dllexport) bool WindSpeeddataCalc(const vector<int> &rawdata, const float angle, const float Distance, vector<string> &datastr);

3、添加cpp文件(和.h文件名相同),cpp文件中添加一下内容

// data.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include"data.h"
#include<Windows.h>
int test(int a, int b)
{
return a + b;
}
const float PI = 3.14f;
bool WindSpeeddataCalc(const vector<int> &rawdata, const float angle, const float Distance, vector<string> &datastr)
{
int cameradata1 = rawdata[0];
int cameradata2 = rawdata[1];
int cameradata3 = rawdata[2];
int cameradata4 = rawdata[3];
datastr.clear();
if (rawdata[0] != 0 && rawdata[1] != 0)
{
float restructwindspeed12 = sqrt(pow((cameradata1 + cameradata2) / 2 / cos(12.5f*PI / 180), 2) + pow((cameradata1 - cameradata2) / 2 / sin(12.5f*PI / 180), 2));//重构风速12
float angle12 = atan(((cameradata1 - cameradata2) / 2 / sin(12.5f*PI / 180)) / ((cameradata1 + cameradata2) / 2 / cos(12.5f*PI / 180))) * 180 / PI;//角度12
float shear12 = abs((cameradata1 - cameradata2) / Distance);//风切变12
datastr.push_back(std::to_string(restructwindspeed12));
datastr.push_back(std::to_string(angle12));
datastr.push_back(std::to_string(shear12));
}
else
{
for (int i = 0; i < 3; i++)
datastr.push_back("--");
}
if (rawdata[2] != 0 && rawdata[3] != 0)
{
float restructwindspeed34 = sqrt(pow((cameradata3 / cos(25.6f*PI / 180) + cameradata4 / cos(25.6f*PI / 180)) / 2 / cos(12.5f*PI / 180), 2) + pow((cameradata3 / cos(25.6f*PI / 180) - cameradata4 / cos(25.6f*PI / 180)) / 2 / sin(12.5f*PI / 180), 2));//重构风速34
float angle34 = atan(((cameradata4 / cos(25.6f*PI / 180) - cameradata3 / cos(25.6f*PI / 180)) / 2 / sin(12.5f*PI / 180)) / ((cameradata3 / cos(25.6f*PI / 180) + cameradata4 / cos(25.6f*PI / 180)) / 2 / cos(12.5f*PI / 180))) * 180 / PI;//角度34
float shear34 = abs((cameradata4 / cos(25.6f*PI / 180) - cameradata3 / cos(25.6f*PI / 180)) / Distance);//风切变34
datastr.push_back(std::to_string(restructwindspeed34));
datastr.push_back(std::to_string(angle34));
datastr.push_back(std::to_string(shear34));
}
else
{
for (int i = 0; i < 3; i++)
datastr.push_back("--");
}
return true;
}

4、生成解决方案  在debug()目录下即有.dll   .lib等文件(vs2017生成解决方案之前 需要去掉预编译头)

二、VS调用动态链接库

1、创建一个新的项目

2、在头文件夹中引入DLL的.h头文件,把.h 、.lib文件复制到新建项目所在的文件夹,.dll放入新建项目的Debug()目录

3、在资源文件中引入.lib文件

4、在main函数中加入如下代码

#include"data.h"

int main()
{
const float angle = 12.5f;
const float distance = 65.0f;
const vector<int> data= { 1193,983,703,784 };
vector<string> datastr;
bool a=WindSpeeddataCalc(data, angle, distance, datastr);
for (int i = 0; i < datastr.size(); i++)
cout << datastr[i]<<endl;
cout << "result:" << a;
getchar();
return 0;
}

5、项目->属性->配置属性->C/C++->代码生成->运行库,选择多线程调试DLL(/MDd)

vs2017 C++动态链接库的创建和调用(隐式)的更多相关文章

  1. C/C++中动态链接库的创建和调用

    DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的 ...

  2. [转贴] C/C++中动态链接库的创建和调用

    DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的 ...

  3. C++ 多项目dll调用-隐式

    将DAA人脸检测做成动态库以便其他程序调用,采用隐式调用完成. 给出部分关于dll制作的关键代码: 1.DLL 多项目DLL编写注意将其他相关项目设置成静态库,以及各库涉及的版本一致性. DLL.h ...

  4. Java 显示调用隐式调用

    当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法.比如:父类:class Animal{ private String name; //如果你定义一个新的构造 ...

  5. oracle的约束隐式创建索引和先索引后约束的区别

    oracle的约束隐式创建索引和先索引后约束的区别 两种情况:1.对于创建约束时隐式创建的索引,在做删除操作的时候: 9i~11g都会连带删除该索引 2.对于先创建索引,再创建约束(使用到此索引)这种 ...

  6. Scala入门系列(十二):隐式转换

    引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能可以实现非常强大而且特殊的功 ...

  7. C++隐式类类型转化

    隐式类类型转换:可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换 class Person { public: Person(): mName()name, mAge ...

  8. JSP——JavaServer Page中的隐式对象(implicit object)、指令(directive)、脚本元素(scripting element)、动作(action)、EL表达式

    目录 1.JSP概述 2.注释(comment) 2.1.JSP注释 2.2.HTML注释 3.隐式对象(implicit object) 3.1.隐式对象清单 3.2.request对象 3.3.o ...

  9. js中的数据类型隐式转换的三种情况

    js的数据类型隐式转换主要分为三种情况: 1. 转换为boolean类型 2. 转换为number类型 3. 转换为string类型 转换为boolean类型 数据在 逻辑判断 和 逻辑运算 之中会隐 ...

随机推荐

  1. microtime() 测试代码执行时间,提高编码效率

    <?php $b_time = microtime(true); $a = array("); $count = ; foreach ($a as $key => $value) ...

  2. leetcode812

    class Solution { public: double largestTriangleArea(vector<vector<int>>& points) { d ...

  3. leetcode884

    class Solution { public: void SplitString(const string& s, vector<string>& v, const st ...

  4. nat123安装启动教程帮助

    转自:http://www.nat123.com/Pages_17_291.jsp 本文就nat123安装启动可能遇到的问题及与安全狗影响处理. 下载安装nat123客户端安装包.第一次安装使用,可选 ...

  5. 前端工作准备-foxmail登陆失败汇总

    foxmail 管理邮箱账号的一个工具软件, 但是在登陆的时候总是遇到明明账号密码没有问题,却总是报错,这里我登陆的时候的集中解决方法总结下: pop和imap 是邮箱的两种协议,大多选imap协议, ...

  6. 可变、不可变数据类型和hash

    一.可变和不可变数据类型 在python中,我们对数据类型除了分为数字类型.字符串类型.列表类型.元组类型.字典类型和集合类型外, 还有另外一种分类方式,我们给数据类型分为可变数据类型和不可变数据类型 ...

  7. 外网访问vmvare

    使用端口映射即可,以tplink wr886n为例, 方法如下: 1.打开浏览器,输入默认ip192.168.0.1回车登录: 2.登录对话框,输入 密码点击确定: 3.点击转发规则--虚拟服务器,点 ...

  8. Aws s3 api

    PUT操作的这个实现将一个对象添加到一个bucket中. 您必须具有对bucket的WRITE权限才能向其中添加对象. Amazon S3从不添加部分对象; 如果您收到成功响应,则Amazon S3将 ...

  9. vware 中 red hat linux NAT模式上网配置

    NAT模式的具体配置NAT方式:虚拟机可以上外网,可以访问宿主计算机所在网络的其他计算机(反之不行). 未修改之前的eth0

  10. swfupload上传文件数量限制之setStats()

    使用swfupload仿赶集的图片上传 SWFUpload是一个基于flash与javascript的客户端文件上传组件. handlers.js文件 完成文件入列队(fileQueued) → 完成 ...