-
2018-07-03 15:20:59
1.隐式链接加载动态链接库
如果有XXX.h ,XXX.lib,XXX.dll,这样就可以隐式链接加载了。
在所要引用的.cpp文件中加入
#include “XXX.h” //包含静态链接库的头文件 #pragma comment(lib,"XXX") //隐式调用库文件
这样就可以使用dll中封装的函数了。
其中语句“#pragma comment(lib,”XXX”)”可以用工程设置对话框的设置来代替。
#pragma comment ( lib,"wpcap.lib" )
表示链接wpcap.lib这个库。
和在工程设置里写上链入wpcap.lib的效果一样(两种方式等价,或说一个隐式一个显式调用),不过这种方法写的 程序别人在使用你的代码的时候就
不用再设置工程settings了。告诉连接器连接的时候要找ws2_32.lib,这样你就不用在linker的lib设置
里指定这个lib了。#include "Mwic_32.h" #pragma comment(lib,"Mwic_32.lib")
就不需要在project setting里面设置了
2.动态加载动态链接库
如果只有XXX.dll,只能动态加载,主要通过LoadLibrary和GetProcAddress两个函数来实现。
举个小例子:
int ires;
typedef int (_cdecl *MyFunc)(int,int);
HMODULE hModule = ::LoadLibrary(“MyDynamicLib.dll”); //加载动态链接库 此提供函数GetMaxCommDiv(int,int)计算最大公约数
MyFinc GetValue = (MyFunc)GetProcAddress(hModule,”GetMaxCommDiv”);
ires=GetValue(m,n);
FressLibrary(hModule);
更多相关内容 -
MFC 动态链接库的使用
2016-03-23 17:23:01MFC创建和使用动态链接库的样例代码。帮助新手学习。共同进步 -
C++/MFC调用动态链接库DLL
2013-08-22 03:30:33我用MFC制作了一个DLL动态链接库,然后用另外一个MFC程序区调用它,但是没有效果。其程序如下: 制作一个MFC生成DLL程序,改DLL内部封装了一个函数。如下(.cpp文件): int sum(int a,int b) { char temp[200];... -
浅析C/C++中动态链接库的创建和调用
2020-12-25 18:13:59下面为你介绍C/C++中动态链接库的创建和调用。 动态连接库的创建步骤: 创建Dll有两种方式。 一、创建Non-MFC DLL动态链接库 1、打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample ... -
DLL动态链接库生成和使用(隐式调用、显示调用)
2019-03-31 22:24:31Windows10 64位系统,VS2013 编程平台...工程二为调用DLL的方法,分为隐式调用和显式调用。两个工程都是控制台应用程序consoleapplication。 对应的文章为 https://blog.csdn.net/u012210613/article/details/88904841 -
VC++:创建,调用MFC动态链接库(扩展DLL)
2017-08-01 16:52:43概述 DLL(Dynamic Linkable Library)动态链接库,...静态链接库与动态链接库都能实现共享代码,如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中,...概述
DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类。
仓库的发展史经历了"无库" ---> "静态链接库" ---> "动态链接库"。
静态链接库与动态链接库都能实现共享代码,如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中,EXE文件执行时动态加载和卸载dll文件。库的分类
1.Win32库(非MFC)库
Win32库又分为:动态链接库和静态链接库
Win32库不采用MFC类库结构,导出函数为标准的C接口,可以被MFC或非MFC编写的应用程序调用。
2.MFC库
MFC库又分为:MFC规则DLL和MFC扩展DLL
MFC规则DLL:包含一个集成自CWinApp的类,但其无消息循环。
MFC扩展DLL:采用MFC的动态链接库创建,它只能被MFC编写的应用程序调用。创建MFC动态链接库
使用vs2010进行创建
1.“新建项目” 项目名为"wnMFCdll”--->选择"MFC dll" --->选择"MFC 扩展 DLL",点击完成:
创建头文件wnMFCdll.h,添加如下代码:
#ifndef _WNMFCDLL_H #define _WNMFCDLL_H class Student { public: void WN_SetAge(int age); void WN_SetName(char* p); void WN_Printf(); private: int age; char name[32]; }; #endif
源文件wnMFCdll.cpp 添加如下代码:
// wnMFCdll.cpp : 定义 DLL 的初始化例程。 // #include "stdafx.h" #include <stdio.h> #include "wnMFCdll.h" #ifdef _DEBUG #define new DEBUG_NEW #endif void Student::WN_SetAge(int age) { this->age = age; } void Student::WN_SetName(char* p) { strcpy(this->name, p); } void Student::WN_Printf() { printf("name = %s; age = %d", name, age); }
在wnMFCdll.def文件中添加如下内容:
; wnMFCdll.def : 声明 DLL 的模块参数。 LIBRARY EXPORTS ; 此处可以是显式导出 WN_SetAge WN_SetName WN_Printf
编译该项目,会在Debug目录下生成wnMFCdll.dll和wnMFCdll.lib两个文件
调用MFC动态链接库
鼠标在解决方案右击 ---> "添加" ---> "新建项目",项目名称为"wnMFCTest",选择win32控制台项目,勾选"控制台应用程序"和"MFC"
修改源文件wnMFCTest.cpp内容如下:
// wnMFCTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "wnMFCTest.h" #include "../wnMFCdll/wnMFCdll.h" #ifdef _DEBUG #pragma comment(lib, "../Debug/wnMFCdll.lib") #define new DEBUG_NEW #endif // 唯一的应用程序对象 CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { //测试MFC dll //Student stu(18, "wangpengfei"); Student stu; stu.WN_SetAge(30); stu.WN_SetName("woniu201"); stu.WN_Printf(); return 0; }
编译连接生成libTest.exe文件,执行结果如下:
欢迎加群交流:C/C++开发交流
-
VS2019开发简单的C/C++动态链接库并进行调用的实现
2020-08-24 21:45:57主要介绍了VS2019开发简单的C/C++动态链接库并进行调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
VS2015中用C++创建MFC DLL动态库
2018-12-20 10:01:54VS2015中用C++创建MFC DLL动态库,包含了mfc dll的创建以及在控制台中调用 -
用MFC调用动态链接库,写一个字符串逆序的小程序
2016-10-27 01:21:32程序内容如上,我的链接库中写的逆序函数是用string的,但MFC框架的编辑框的数据类型是CString, 所以一直报如下错误,E:\VC\dlltest\dlltestDlg.cpp(226) : error C2664: 'SetDlgItemTextA' : cannot convert ... -
MFC调用LED动态链接库LEDSender.dll程序源代码
2017-07-11 14:50:45完整的MFC调用LED动态链接库LEDSender.dll的Demo,经过经过本人亲自测试完全可用,VS2012编译(在原来旧版本Demo基础上做了改进,以及重新编译了LEDSender.dll库) -
MFC-动态链接库使用
2018-07-12 00:35:41二、调用动态链接库 1.动态加载 创建一个控制台程序 把dll复制到工程目录下 在cpp文件中添加代码,编译运行 2.静态加载 Calclator.h Dll1.lib Dll1.dll 复制这三个文件到项目中。...win10,vs2017.
动态链接库(Dynamic Linkable Library),通常用于封装一些功能函数,在不公开源码的情况下可以供其它程序使用。
特点:
1.增强应用程序的扩展性。
2.能够使用多种语言编写,如:Delphi、Visual Basic、Visual C++等。
3.节省内存。
4.有助于资源共享。
访问:
1.静态加载(h、lib、dll)
2.动态加载(dll)
一、创建动态链接库
1.创建工程(最好不要放在中文目录下)
2.添加C++类,并添加代码。
3.添加两个函数,类似于构造、析构函数。
4.添加一个.def文件,设置导出函数名。(_stdcall是一种流行的函数调用约定,为了防止发生函数命名改编的情况,定义def文件)
5.生成解决方案。
二、调用动态链接库
1.动态加载
创建一个控制台程序
把dll复制到工程目录下
在cpp文件中添加代码,编译运行
2.静态加载
Calclator.h
Dll1.lib
Dll1.dll
复制这三个文件到项目中。
编译还有点问题?
-
MFC动态链接库调用详解
2016-11-04 23:09:37MFC动态链接库的调用,有好多种方式,这里只介绍一种简单的调用的方式,只需要把动态链接库编译后的.dll文件放到调用界面的Debug下面。再在界面需要调用动态链接库里添加相关函数就行了。找了好多资料,发现没有详细...MFC动态链接库的调用,有好多种方式,这里只介绍一种简单的调用的方式,只需要把动态链接库编译后的.dll文件放到调用界面的Debug下面。再在界面需要调用动态链接库里添加相关函数就行了。找了好多资料,发现没有详细的介绍,下面就是从动态链接库建立开始,一点点详细的介绍。
首先是,动态链接库的建立。我们这里讲的是MFC的标准库的建立。用的是vs2010。
我们建立一个名为TestDLL的动态链接库。
然后,我们这里实现一个小程序,在动态链接库里返回四个点,用来画一个矩形。
首先,我们写的是动态链接库里的内容,先不考虑界面的问题。
我们在动态链接库里新建一个类,用来储存矩形的四个点。注意,这里的类名不要起的很常见,例如,CDrawRect这样的类,因为很有可能和MFC内部已有的类冲突,从而会出现显示调用不明确的情况。
上面出现的warning“找不到符号唯一的匹配项错误”,是因为在mfc中已经有定义。
所以,我们起类名字时,要注意这点。
然后,我们在新建的类中添加一个公有成员函数,名字叫做
CPoint* GetPoint();
这样,就建立一个函数,里面返回的是矩形的点的数组的指针。这样,就能通过地址来调用数组里面的一串值了。
在.cpp里,写下:
CPoint* CDrawRectPoint::GetPoint() { CPoint getPoint[4]; getPoint[0].x=100; getPoint[0].y=100; getPoint[1].x=100; getPoint[1].y=500; getPoint[2].x=500; getPoint[2].y=500; getPoint[3].x=500; getPoint[3].y=500; return getPoint; }
这里,我们为了养成一个良好的习惯,要把动态链接库的接口专门在一个派生类中写出来,这样,就会在导出的时候,我们只需要对接口进行处理就好了。并且,在提交项目时,也只需要提供.dll和接口类就好,可以有效的保证自己代码的安全和核心代码的利益。
于是,我们新建一个派生类,从CDrawRectPoint类里派生出来一个类,名字叫做CDrawRectPointIO。
#include "drawrectpoint.h" class CDrawRectPointIO: public CDrawRectPoint { //说明:没有把构造函数析构函数写出来 CPoint* GetPoint(); }
在.cpp里:
CPoint* CDrawRectPointIO::GetPointIO() { return GetPoint(); }
好了,上面是动态链接库里的内容已经写出来,下面是写出动态链接库的调出。
在CDrawRectPointIO.h文件中,在最开始的部分,加上:
//即把导出的函数声明为全局的,并且声明为外部可调用 extern "C" __declspec(dllexport)CPoint* __stdcall GetPointIO();
然后,再在源文件里的.def文件里,添加导出的函数的名称,因为这个是不加变量,只有函数名称的,所以,这也是前面提到的为什么函数命名时尽量不要用太常见的函数名的原因。
之后是调试,在Debug里得到.dll。到这里就是动态链接库的导出过程。
然后是动态链接库在界面中的调用。
新建一个MFC单文档类。名字叫做TestEXE,设置成MFC标准。这里为了方便画,直接就在OnDraw(CDC*pDC)函数里写了,实际上不推荐在这个函数里调用动态链接库,因为系统里会不断的自动刷新OnDraw()函数,所以,为了安全起见,我们最好不要用在OnDraw()函数里写。这里,我们用一个控制变量来控制是否启用动态链接库。
首先,是建立之后,F5调试程序。生成Debug,把前面动态链接库生成的.dll复制粘贴到界面的Debug里。
在资源视图里的Menu里添加菜单栏,并把ID修改。类向导到view里。
在view.h里添加成员变量,int m_nControl;在构造函数里初始化为0。
在view.cpp里,对刚才添加的OnRect()函数里,添加控制变量。
void CTestEXEView::OnRect() { // TODO: 在此添加命令处理程序代码 m_nControl = 1; Invalidate(); }
下面先是对动态链接库的调用,在view.cpp里,在文件头下添加如下:
typedef CPoint*(WINAPI *dllDraw)();
在OnDraw里添加:
if(1 == m_nControl) { HINSTANCE hDLL; hDLL=LoadLibrary("TestDLL.dll");//加载动态链接库MyDll.dll文件; if(hDLL == NULL) { MessageBox("无法载入dll\n"); FreeLibrary(hDLL); } dllDraw DrawNew; DrawNew=(dllDraw)GetProcAddress(hDLL,"GetPointIO"); if(DrawNew == NULL) { MessageBox("第二步无法载入dll\n"); FreeLibrary(hDLL); } CPoint *m_point = new CPoint[4]; m_point = DrawNew(); CPoint point[4]; for(int i=0;i<4;i++) { point[i]=m_point[i]; } pDC->MoveTo(m_point[0]); pDC->LineTo(m_point[1]); pDC->LineTo(m_point[2]); pDC->LineTo(m_point[3]); pDC->LineTo(m_point[0]); FreeLibrary(hDLL); m_nControl=0; delete []m_point; m_point = NULL; }
最后得到结果如图:
以上就是全部内容了。
-
C++学习记录二——创建C++动态链接库封装类(函数)给MFC调用(初学者详细步骤)
2021-10-29 14:31:37项目:MFC调用C++动态链接库的项目的DLL 一、创建DLL 如图,选好要创建的项目 取个名字,选好地址,点击“创建” 在解决方案资源管理器中,右击“头文件”——>"添加“——>"新建项", 选择”... -
火山PC动态链接库例子(动态DLL).rar
2021-07-24 14:11:20火山PC动态链接库例子(动态DLL) -
C/C++中动态链接库的创建和调用
2016-12-19 09:11:48C/C++中动态链接库的创建和调用 DLL有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。下面为你介绍C/C++中动态链接库的创建和... -
MFC动态链接库的创建以及使用
2019-12-21 18:43:58一、创建动态链接库 1.右击应用程序的解决方案,选择添加->新建项目 2.点击下一步,点击完成 3.添加导出标识符 4.将TEST_Dll_EXPORT添加到预处理器当中去 进入动态库属性页,选择C/C++>>预处理器&... -
MFC加载动态链接库方法
2019-10-09 03:16:00MFC加载动态链接库方法 1、LoadDll.cpp 1 #include "StdAfx.h" 2 #include "LoadDLL.h" 3 4 pMFCCallBackDll DLL_MFCCallBackDll; 5 ... -
动态调用动态链接库(.dll),包括函数和类的调用
2018-08-27 16:25:11C++,动态链接库的动态调用,以及如何动态调用库中的函数和类。 -
MFC-VS2019-EXE调用DLL-demo.zip
2019-11-27 16:57:26VS2019 MFC EXE调用DLL 的一个小例子,亲测可行,希望对初学者有帮助。一般网上的例子都是隐式链接的,这个DEMO是显示链接。 -
MFC共享式动态链接库编写与调试
2013-12-06 17:38:29详细的介绍了如何编写MFC共享式动态链接库的编写以及调试方法,以及如何在另一个程序中调用该dll中的接口创建动态链接库中定义的窗口 -
动态链接库在LabVIEW中的高级应用
2020-11-05 09:03:12利用重新编写动态链接库的方法可以建立旧函数库与LabVIEW联系的通道,提高现有资源的利用率。本文以SDK2000图像采集卡为例,介绍具体的实现过程。 1. 引言 实验室虚拟仪器工作平台是美国国家仪器公司研制的一... -
[MFC] 动态链接库的制作过程和使用方法与总结
2019-08-27 18:54:03关于动态链接库的制作过程和使用方法这部分,看了不少网上相关的内容,都看的不是很懂,所以在这里写一篇文章给那些给我一样看不懂的小白参考一下,好了言归正传, 假设有两个C++项目A、B,并且都... -
C++/MFC-动态链接库(DLL)
2017-06-10 21:50:44一、MFC类DLL创建 新建一个MFC DLL工程,取名为MFCDLL。 二、入口初始化 virtual BOOL InitInstance(); 三、退出清理 virtual int ExitInstance(); 四、导出MFC类函数 法一: 在函数名、变量名等的... -
Windows DLL动态链接库(MFC版)的创建和引用
2022-02-13 21:45:23本文将介绍Windows下DLL(动态链接库)的创建和引用。 声明:人外有人,天外有天,我的知识存在局限性,但方法一定管用。 一、生成动态链接库 这里的所谓生成动态链接库,就是为了获得三件套–".lib",".dll",".h... -
VC的静态链接库 & 动态链接库
2020-08-19 00:08:04静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件,动态链接库的使用,根据不同的调用方法,需要提供不同的资源。静态链接库与动态链接库都是共享代码的方式,静态链接库和动态链接库的区别在于静态... -
labview调用动态链接库
2021-01-12 04:24:58如何从LabVIEW中调用动态链接库DLL您好,很高兴为您解答。 要从LabVIEW中调用动态链接库(DLL),首先要确定是哪种类型的DLL。 基本上有两种类型的DLL需要考虑:C/C++ DLL 和Microsoft .NET assembly. C/C++ DLL 用C, ... -
visual studio 2017 MFC dll DLL 动态链接库
2021-11-11 10:41:02visual studio 2017 MFC dll DLL 工程 -
MFC调用dll实现简单加减法,求最大最小值
2013-07-26 09:28:07创建了两个dll文件分别实现计算加减法和求最大最小值,提供了dll功能函数的接口,然后新建了dll的MFC测试应用程序,连接那两个dll库文件,然后通过函数接口调用库函数。现分享测试程序源码,供大家学习探讨!