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类型 数据在 逻辑判断 和 逻辑运算 之中会隐 ...
随机推荐
- 1024 Palindromic Number
题意: 给出一个数N(N<=10^10),最多可操作K次(K<=100),每次操作为这个数和其反转之后的数相加,若得到的结果为回文数,则输出:若在K次迭代后仍然不是回文数,在输出第K次操作 ...
- SpringMVC的控制器接收前端数据的方式
1.请求处理方法中可以出现以下几种参数类型,直接在controller方法形参上定义默认类型的对象,就可以使用这些对象.可以通过下列对象来获取前台传来的参数: ①HttpServletRequest对 ...
- windows 共存多个位数不同的jdk时,eclipse的报错对应措施
1. 判断当前jdk的位数 # java -version java version "1.6.0_26" Java(TM) SE Runtime Environment (bui ...
- Python三元运算和lambda表达式
一.三元运算 1.定义:三元运算是if-else 语句的快捷操作,也被称为条件运算. 2.结构: [on_true] if [expression] else [on_false] 3.示例: ...
- go语言 robfig/cron包 实现定时 调用
package main import ( "github.com/robfig/cron" "time" "fmt" "os&q ...
- 整理出一个比较实用的SqlHelper类 满足大多数情况的使用
/// <summary> /// SqlHelper类 by zy 2016-3-11 /// </summary> public sealed class SqlHelpe ...
- GIT常用命令以及作用【备忘】
git commit 提交一个修改 git branch branchName 新建一个branchName的分支 git merge branchName 将当前分支与branchName分支合 ...
- 文件流的处理 C C++
C: 借鉴C 文件操作库函数总结 eg: #include <fstream> #include <iostream> #include <cstdio> usin ...
- 2014蓝桥杯B组初赛试题《奇怪的分式》
题目描述: 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) ...
- 利用JDBC连接数据库(MySQL)
1 在eclipse中创建一个maven项目(在Java模式下,不要在JavaEE模式下) 1.1 file -->> new -->> project 2 下载数据库驱动 ...