vs2017 C++动态链接库的创建和调用(隐式)
一、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++动态链接库的创建和调用(隐式)的更多相关文章
- C/C++中动态链接库的创建和调用
DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的 ...
- [转贴] C/C++中动态链接库的创建和调用
DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的 ...
- C++ 多项目dll调用-隐式
将DAA人脸检测做成动态库以便其他程序调用,采用隐式调用完成. 给出部分关于dll制作的关键代码: 1.DLL 多项目DLL编写注意将其他相关项目设置成静态库,以及各库涉及的版本一致性. DLL.h ...
- Java 显示调用隐式调用
当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法.比如:父类:class Animal{ private String name; //如果你定义一个新的构造 ...
- oracle的约束隐式创建索引和先索引后约束的区别
oracle的约束隐式创建索引和先索引后约束的区别 两种情况:1.对于创建约束时隐式创建的索引,在做删除操作的时候: 9i~11g都会连带删除该索引 2.对于先创建索引,再创建约束(使用到此索引)这种 ...
- Scala入门系列(十二):隐式转换
引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能可以实现非常强大而且特殊的功 ...
- C++隐式类类型转化
隐式类类型转换:可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换 class Person { public: Person(): mName()name, mAge ...
- 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 ...
- js中的数据类型隐式转换的三种情况
js的数据类型隐式转换主要分为三种情况: 1. 转换为boolean类型 2. 转换为number类型 3. 转换为string类型 转换为boolean类型 数据在 逻辑判断 和 逻辑运算 之中会隐 ...
随机推荐
- (转)Oracle存储过程基本语法
本文转载自:http://www.cnblogs.com/hero4china/articles/base_rule_oracle_procedure.html 存储过程 1 CREATE OR R ...
- cp -f 还是提示是否覆盖
新做了服务器,cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,这在大量cp覆盖操作的时候是不能忍受的. 把a目录下的文件复制到b目录 以下是代码片段: cp –r a/* b 执行上面的命令时, ...
- java NIO(转载)
(原文地址:https://zhuanlan.zhihu.com/p/23488863) NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型 ...
- JavaEE笔记——BaseDao的使用
在Hibernate框架中使用BaseDao主要的作用是减少冗余代码,在对Dao的操作中CRUD可以说是最普通最常见的操作了,基本上面对不同的数据表都会有类似的CRUD操作,BaseDao的思想就是把 ...
- kafka集群配置和java编写生产者消费者操作例子
kafka 安装 修改配置文件 java操作kafka kafka kafka的操作相对来说简单很多 安装 下载kafka http://kafka.apache.org/downloads tar ...
- java 删除文件夹 / 删除某文件夹下的所有文件
import java.io.File; /*************************删除文件夹delFolder / 删除文件夹中的所有文件delAllFile *start******** ...
- python学习——练习题(5)
""" 题目:输入三个整数x,y,z,请把这三个数由小到大输出. """ def inputInt(i): ""&quo ...
- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart)
在接触WebService时值得收藏的一篇文章: 在调试Axis1.4访问WebService服务时,出现以下错误: Unable to find required classes (javax.ac ...
- Spring总结三:DI(依赖注入)
简介: 所谓的依赖注入,其实是当一个bean实例引用到了另外一个bean实例时spring容器帮助我们创建依赖bean实例并注入(传递)到另一个bean中,比如你使用Spring容器创建的对象A里面需 ...
- java基础之JDBC一:概述及步骤详解
1. JDBC的简介 概述: 就是Java用来操作不同数据库(DBMS)的类库(技术), 本质就是一些类和接口. /* 类: DriverManager 接口: Driver, Connection, ...