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类型 数据在 逻辑判断 和 逻辑运算 之中会隐 ...
随机推荐
- 【转】Jmeter做功能测试的优点和不足
利用Jmeter做功能测试有以下优点: ● 不依赖于界面,如果服务正常启动,传递参数明确就可以添加测试用例,执行测试 ● 测试脚本不需要编程,熟悉http请求,熟悉业务流程,就可以根据页面 ...
- 【转】使用Jmeter针对ActiveMQ JMS Point To Point压力测试
准备工作 针对JMS类型的Sampler,需要额外的jar包(这里用的是apache ActiveMQ,将下载的AMQ apache-activemq-5.5.0根目录下的activemq-all-5 ...
- 全文检索引擎Solr系列——Solr核心概念、配置文件
Document Document是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的一条记录,可以包含一个或多个字段(Field),每个字段包含一个name和文本值. ...
- 复制书稿(book) (二分,贪心+dp)
复制书稿(book) 时间限制: 1 Sec 内存限制: 128 MB提交: 3 解决: 1[提交][状态][讨论版][命题人:quanxing] 题目描述 现在要把m本有顺序的书分给k个人复制( ...
- thinkphp中的验证码的实现
1.php端生成验证码函数 public function verify(){ // 验证码 import("@.Util.Image"); Image::buildImageVe ...
- 一种js异步处理方式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java - 输入的字符串中是否包含中文
今天和同事在讨论一个问题,需要检查“输入的字符串中是否包含中文”,刚开始想到是用正则表达式,正则表达式中是以[u4e00-u9fa5]来全匹配字符是否是中文,但现在面临的问题是这个字符串中还可能包含英 ...
- Python技巧(一)
一 if..else的多种写法 a, b, c = 1, 2, 3 1.常规 if a > b: c = a else: c = b 2.表达式 c = a if a > b else ...
- 第一次调用Web service响应速度慢的解决办法
Env: Client: WinForm(Net Framework 2.0) Server:Web Service(Net Framework 4.0) Problem: Client use pr ...
- jenkins容器权限被拒绝
问题,我们从官网上面pull下jenkins后,如果直接运行容器的没问题 docker run -d -p 8080:8080 -v jenkins:latest 不过我们可能需要映射下容器内部的地址 ...