创建DLL工程
新建项目: Visual C++ -> Win32项目,名称:myDLL
下一步,选择DLL,确定。
修改文件名myDLL.cpp改为myDLL.c;不然调用DLL时会出现错误代码127(找不指定程序,就是找不到导出函数ExportMsg)
//#include "stdafx.h"
#include <Windows.h>
#include <tchar.h>
// 使用__declspec(dllexport)声明导出函数
_declspec(dllexport) DWORD ExportMsg(LPTSTR szMsg);
DWORD ExportMsg(LPTSTR szMsg)
{
MessageBox(NULL,szMsg,_T("由导出函数弹出的消息!"),MB_OK);
return 0;
}
编译将生产myDLL.lib和myDLL.dll
调用DLL
三段式:LoadLibrary——GetProcAddress——FreeLibrary;加载库,获取函数地址,释放库。
新建工程:UseDLL
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <Windows.h>
// 指向函数的指针类型
typedef DWORD (*MY_EXPORT_PROC)(LPTSTR);
void Test()
{
// 获得Dll模块句柄
HINSTANCE hinstLib = LoadLibrary(TEXT("myDLLTwo.dll"));
// 是否加载成功
if (hinstLib != NULL)
{
// 获得指定导出函数的地址
MY_EXPORT_PROC lpProcAdd = (MY_EXPORT_PROC) GetProcAddress(hinstLib, "ExportMsg");
// 判断是否成功
if ( lpProcAdd !=NULL)
{
(lpProcAdd) (_T("hello world!!!!"));
}
// 释放DLL
FreeLibrary(hinstLib);
}
}
int main()
{
Test();
return 0;
}
注意:UseDLL.exe文件要与myDLL.dll文件在同一个目录
介绍DLL
DLL(动态链接库):是作为共享函数库的可执行文件。
1.作用:动态链接库是将程序模块化的重要方法,应用程序开发中,需要在多个进程和模块间共用代码的情况下,动态链接库是很好的解决方法。在运行时,只有当exe程序确实要调用这些DLL模块的情况下,系统才会将他们装载到内存空间中。这样可以减少了exe文件的大小和对内存空间的需求,而且这些DLL模块可以同时被多个应用程序使用。
2.内部构成:动态链接库文件中包含若干公用的代码、数据等,供其他模块使用。
3.为什么叫动态链接? 由于程序是在进程创建或程序运行时进行链接的,因此称为“动态链接”,与“静态链接”相对。静态链接是在程序构建时由链接器进行链接,将代码和数据组织在同一个可执行文件中的链接方式。
4.优点:DLL是程序模块化的重要方法,也为程序的复用提供了可能,同一个动态链接库可以被不同的进程加载。DLL中通常包括一些高复用性的代码,WindowsAPI就存在于动态链接库中。采用动态链接库后,同样的代码只需要有一份就可以,每个需要使用到这些功能的程序都使用同一份代码。将不同程序都可能使用到的一系列函数和数据放置在DLL中,可以大大减小应用程序的体积(多个程序共用一个模块),使程序更宜于升级与维护(如果程序需要更新,则只需要修改一个模块,不需要修改所有的程序)。
5.模块:每个可执行程序都可以称作一个模块,DLL文件是模块。exe文件也是模块,称为主模块。
6.特点:
DLL的编写与具体语言和编译器无关。只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。譬如windows提供的系统DLL,在任何开发环境中都能被调用,不在乎C++,Delphi。
程序员在建立一个DLL文件时,连接器会自动为其生产一个对应的.lib文件,该文件包含了DLL导出函数的符号及序号(并不含有实际的代码)。在应用程序中,.lib文件将作为DLL的替代文件参与编译。
7.扩展:动态链接库技术室windows最重要的实现技术之一,windows的许多新功能,新特性都是通过DLL来实现的。其实windows本身就是由许多DLL组成的,它最基本的三大组成模块式Kernel32.dll(包含了用于内存管理,进程线程调度,系统文件的各个函数),GDI32.dll(主要处理图像方面的操作,如画图,显示文本),User32.dll(主要处理用户界面的操作,如窗口的创建和消息的发送)。它们在system32文件夹下。
分享到:
相关推荐
Delphi创建Dll和调用Dll示例(包含Dll窗体调用) 网上介绍比较杂乱,特地整理了一份Demo代大家学习参考。 1.socketA_dll 为dll工程目录。 2.LoadDllDemo 为【静态调用】dll工程目录。 3.LoadDllDemo_动态调用 为...
通过VS2017,生成dll项目,生成dll,并在另外程序中调用dll。....................
很简单的创建DLL文件及外部调用DLL的实力,对于没有这方面经验的初学者有很好的参考价值
C#中创建和调用DLL 含源码 学习C#调用dll的例子
DelphiDll创建与调用源码 使用delphi生成动态连接库文件 并使用动态连接库
C++中,由vs工程生成、调用dll的方法(含源码和说明文档)
c++ 创建dll(动态库)、static lib(静态库),以及dll的相互调用 示例vs2022工程 sln项目文件在 c++_dll_staticLib\libtest\MathTestLib 目录下 以前有小错误,更新了错误(2023-05-28)
使用JNI,vs2010 生成dll, JSP中调用dll 中创建的工程和vs2010下用于生成dll的工程代码
C语言创建DLL,并在C中调用DLL的例子,步骤详细,入门的好教程。
LabVIEW中DLL文件的创建及调用方法
封装自定义方法,编译成DLL文件供外部调用
在Dll动态库调用CDialog实例的源代码,供您熟悉,可以方便您在DLL中进行界面UI的开发,同时还附有调用此DLL的源代码测试程序。
VC6.0中_创建、调用dll(20150418211345).pdf
运用DELPHI7.0创建并调用DLL计算两个数中的最大数和最小数。
自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上 Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着,例如显示的字体和...
DelphiXE10.3编写的静态dll及如何调用dll的示例,简单好用,包含dll工程文件和exe工程文件
QT创建与调用Dll方法(包括类成员)--显式调用 http://www.cnblogs.com/lomper/p/4112626.html
c++调用dll的两种方式c++调用dll的两种方式c++调用dll的两种方式c++调用dll的两种方式c++调用dll的两种方式c++调用dll的两种方式c++调用dll的两种方式
MFC 调用C# dll 实现excel的创建