C++笔记-DLL的编写与调用
发布日期:2021-06-30 10:40:50
浏览次数:2
分类:技术文章
本文共 1741 字,大约阅读时间需要 5 分钟。
目录
基本概念
Visual Studio的编译环境下,DLL分为3类:
非MFC的DLL,使用SDK API进行编程,能被所有语言调用。
MFC规则DLL,可以使用MFC进行编程,能被其他语言调用。
MFC扩展DLL,可以使用MFC进行编程,但只能被MFC编写的程序调用。
// dllmain.cpp : 定义 DLL 应用程序的入口点。#include "stdafx.h"BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ ... ... ... ... ... ...}
hMoulde:指向dll实例的句柄;
ul_reason_for_call:指明dll被调用的原因
LPVOID:保留,不使用。
内部为:
{ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}
DLL_PROCESS_ATTACH:当进程第一次链接DLL并通过它的入口点时,会得到这个参数。
DLL_PROCESS_DETACH:进程在空间内取消DLL映射时,得到这个参数。
DLL_THREAD_ATTACH:每当新线程创建时,系统会对所有映射的DLL传入此参数调用入口函数。
DLL_THREAD_DETACH:每当线程退出或返回时,系统会对所有映射的DLL传此参数要求执行对应清理工作。
进程调用DLL的过程:
使用LoadLibrary加载需要的dll,
使用GetProcAddress获取函数入口
然后就可以调用了!
代码与实例
dll关键代码如下:
.h文件:
#pragma once#include "stdafx.h"#define ExportFunc _declspec(dllexport)extern "C" ExportFunc int Add(int a, int b);extern "C" ExportFunc int Sub(int a, int b);
.cpp文件
#include "stdafx.h"#include "ExportDLL.h"int Add(int a, int b){ return a + b;}int Sub(int a, int b){ return a - b;}
调用采用mfc:
typedef int(*ADD)(int a, int b);typedef int(*SUB)(int a, int b);void CInjecterDemoDlg::OnBnClickedButton1(){ HMODULE hModule = LoadLibraryW(_T("E:\\vs2012\\DllTest\\Debug\\DllTest.dll")); if(!hModule){ return; } ADD Add; SUB Sub; Add = (ADD)GetProcAddress(hModule, "Add"); Sub = (SUB)GetProcAddress(hModule, "Sub"); if(!Add || !Sub){ return; } int Result; Result = 0; Result = Add(10, 5); CString result; result.Format(_T("%d"), Result); MessageBox(result); Result = Sub(10, 5); result.Format(_T("%d"), Result); MessageBox(result); FreeLibrary(hModule);}
项目下载地址:
转载地址:https://it1995.blog.csdn.net/article/details/103301206 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月25日 03时26分12秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HUE
2019-04-30
CDH
2019-04-30
行为树 BT
2019-04-30
Cassandra & CQL
2019-04-30
Oracle数据库
2019-04-30
Oracle数据库命令
2019-04-30
plsql
2019-04-30
有限状态机FSM
2019-04-30
Win10 Docker
2019-04-30
Python绘制动画并保存为gif/mp4 (matplotlib)
2019-04-30
PRM概率路线图
2019-04-30
ROS(六)——订阅者Subscriber的编程实现(C++ & Python)
2019-04-30
ROS(七)——话题消息的定义与使用
2019-04-30
yolov3入门实战
2019-04-30
B树 & B+树
2019-04-30
Node-Red(一)——简介与安装
2019-04-30
representation learning 表示学习/表征学习
2019-04-30
Haar特征
2019-04-30
Python 之 histogram直方图
2019-04-30