C++中调用DLL中的函数的两种方式
一、DLL源文件:
extern "C" __declspec(dllexport)
int add(int a, int b)
{return a + b;
}
二、静态调用:
#pragma comment(lib, "DemoDLL.lib")
extern "C" int add(int a, int b);using namespace std;// 静态调用DLL库
int static_call(int a, int b)
{return add(a, b);
}
三、动态调用:
// 动态调用DLL库
int dynamic_call(int a, int b)
{typedef int(*AddFunc)(int, int);HMODULE module = LoadLibrary(L"DemoDLL.dll");if (module == NULL){cout << "加载DemoDLL.dll动态库失败" << endl;return -1;}AddFunc add = (AddFunc)GetProcAddress(module, "add");return add(a, b);
}
四、完整调用代码:
#include <sstream>
#include <iomanip>
#include <iostream>
#include <Windows.h>#pragma comment(lib, "DemoDLL.lib")
extern "C" int add(int a, int b);using namespace std;// 静态调用DLL库
int static_call(int a, int b)
{return add(a, b);
}// 动态调用DLL库
int dynamic_call(int a, int b)
{typedef int(*AddFunc)(int, int);HMODULE module = LoadLibrary(L"DemoDLL.dll");if (module == NULL){cout << "加载DemoDLL.dll动态库失败" << endl;return -1;}AddFunc add = (AddFunc)GetProcAddress(module, "add");return add(a, b);
}int main()
{int n = 100, m = 200;cout << static_call(m, n) << endl;cout << dynamic_call(m, n) << endl;return 0;
}
C++中调用DLL中的函数的两种方式相关推荐
- 天马行空W:在C++中调用DLL中的函数
1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...
- 在C++中调用DLL中的函数
1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...
- linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式
主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...
- Android中实现SQLite数据库CRUD操作的两种方式
Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...
- android布局密码,Android中EditText显示明文与密码的两种方式
效果图如下所述: 布局 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="h ...
- 在C++中调用DLL中的函数(2)
本文转自:http://blog.sina.com.cn/s/blog_53004b4901009h3b.html 应用程序使用DLL可以采用两种方式: 一种是隐式链接,另一种是显式链接.在使用DLL ...
- java native函数库_Java 层调用 Native 层函数的两种方式
概述 Java 层如何调用Native层函数,大家都应该知道使用JNI(Java 本地接口). 通过在java层声明native方法,然后遵守JNI规范命名Native函数,即可建立Java层nati ...
- 在 Shell 脚本中调用另一个 Shell 脚本的三种方式
先来说一下主要以下有几种方式: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh s ...
- QT之在QML中使用C++类和对象的两种方式
一 类的方式实现在QML中使用C++对象 二 对象的方式实现在QML中使用C++对象 QML其实是对ECMAScript的扩展,融合了Qt object系统,它是一种新的解释性语言,QML引擎虽然由Q ...
最新文章
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色配置)实战
- JAVA(IO流)知识整理
- 分分钟教会你使用HTML写Web页面
- asp.net错误.在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错...
- 2017-2018-2 20155228 《网络对抗技术》 实验四:恶意代码分析
- python面向对象(2)—— 继承(1)
- 用户不见了_03 | 为什么你设计的信息用户总是看不见
- iOS -- SKScene类
- JS学习记录(BOM部分)
- 博客目录列表(C与Linux部分)
- 解决Flink案例DataStream中使用keyBy(0),keyBy弃用的问题
- 蓝桥杯训练 2n皇后
- SQL中DB2数据库修改某字段长度或类型
- matlab %%?
- C++11 | 正则表达式(4)
- 大数据Spark技术数据分析综合实验:出租车数据分析
- 怎么修改思迅软件的服务器地址,思迅的服务器地址如何更改
- VMware中Linux网络配置
- 树莓派CM4_Tiny(双HDMI)扩展板运行Openwrt演示(有线以太网)
- 视觉测量—结构光标定1