- 浏览: 1524951 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
在建立的工程中添加lib.h及lib.cpp文件,源代码如下:
/* 文件名:lib.h */
#ifndef LIB_H
#define LIB_H
extern "C" int __declspec(dllexport)add(int x, int y);
#endif
/* 文件名:lib.cpp */
#include "lib.h"
int add(int x, int y)
{
return x + y;
}
分析上述代码,dllTest工程中的lib.cpp文件与第2节静态链接库版本完全相同,不同在于lib.h对函数add的声明前面添加了__declspec(dllexport)语句。这个语句的含义是声明函数add为DLL的导出函数。DLL内的函数分为两种:
(1)DLL导出函数,可供应用程序调用;
(2) DLL内部函数,只能在DLL程序使用,应用程序无法调用它们。
与第2节对静态链接库的调用相似,我们也建立一个与DLL工程处于同一工作区的应用工程dllCall,它调用DLL中的函数add,其源代码如下:
#include <stdio.h>
#include <windows.h>
typedef int(*lpAddFun)(int, int); //宏定义函数指针类型
int main(int argc, char *argv[])
{
HINSTANCE hDll; //DLL句柄
lpAddFun addFun; //函数指针
hDll = LoadLibrary("..\\Debug\\dllTest.dll");
if (hDll != NULL)
{
addFun = (lpAddFun)GetProcAddress(hDll, "add");
if (addFun != NULL)
{
int result = addFun(2, 3);
printf("%d", result);
}
FreeLibrary(hDll);
}
return 0;
}
而应用程序对本DLL的调用和对第2节静态链接库的调用却有较大差异,下面我们来逐一分析。
首先,语句typedef int ( * lpAddFun)(int,int)定义了一个与add函数接受参数类型和返回值均相同的函数指针类型。随后,在main函数中定义了lpAddFun的实例addFun;
其次,在函数main中定义了一个DLL HINSTANCE句柄实例hDll,通过Win32 Api函数LoadLibrary动态加载了DLL模块并将DLL模块句柄赋给了hDll;
再次,在函数main中通过Win32 Api函数GetProcAddress得到了所加载DLL模块中函数add的地址并赋给了addFun。经由函数指针addFun进行了对DLL中add函数的调用;
最后,应用工程使用完DLL后,在函数main中通过Win32 Api函数FreeLibrary释放了已经加载的DLL模块。
通过这个简单的例子,我们获知DLL定义和调用的一般概念:
(1)DLL中需以某种特定的方式声明导出函数(或变量、类);
(2)应用工程需以某种特定的方式调用DLL的导出函数(或变量、类)。
http://www.cppblog.com/ivenher/articles/dll_2.html
(转)
发表评论
-
数据结构与算法分析(C语言描述)源代码与答案
2009-12-14 11:44 6715数据结构与算法分析(C语言描述)(第二版) Mark A ... -
A new Michael Jackson song
2009-10-12 16:48 948<!-- [if gte mso 9]><x ... -
makefile 大全
2009-02-24 07:37 1180http://chenl.blogbus.com/logs ... -
Linux_Unix环境下的Make和Makefile详解
2009-02-24 07:35 1320无论是在 Linux 还是在 U ... -
C++的11个注意要点
2009-02-24 07:33 1030C++ 的 11 个注意要点 ... -
运用autoconf和automake自动生成Makefile实例讲解
2009-02-24 07:30 4068运用 autoconf 和 automake ... -
makefile详解(6)
2009-02-24 07:23 1784makefile 详解( 6 ) ... -
makefile详解(5)
2009-02-24 07:22 1674<!-- --><!-- -->& ... -
makefile详解(4)
2009-02-24 07:21 1422<!-- --><!-- -->& ... -
makefile详解(3)
2009-02-24 07:20 1637<!-- --><!-- --> & ... -
makefile详解(2)
2009-02-24 07:19 1331<!-- --><!-- --> & ... -
makefile详解(1)
2009-02-24 07:18 1505makefile 详解 ... -
VC++动态链接库(DLL)编程深入浅出(二) Win32 Dynamic-Link Library
2008-08-19 14:23 8025上节给大家介绍了静态链接库与库的调试与查看( 动态链 ... -
VC++动态链接库(DLL)编程深入浅出(一) Win32 Static Library
2008-08-19 14:13 7115http://www.pconline.com.cn/pced ... -
VC++常用数据类型及其操作详解
2008-08-18 23:43 1384http://blog.csdn.net/flxyzsby/a ... -
VC++数据类型转换大全
2008-08-18 23:25 64099int i = 100; long l = 2001; f ... -
DLL导出变量
2008-08-18 16:20 2071DLL定义的全局变量可以被调用进程访问;DLL也可以访问调用进 ... -
DLL导出类
2008-08-18 16:20 2628DLL中定义的类可以在应用工程中使用。 下面的例子里,我 ... -
MFC规则DLL 概述
2008-08-18 16:19 2822MFC规则DLL的概念体现在两方面: (1) 它是MFC ... -
MFC规则DLL的创建
2008-08-18 16:18 1852我们来一步步讲述使用MFC向导创建MFC规则DLL的过程,首先 ...
相关推荐
非MFC DLL(Non-MFC DLL)是在Visual Studio中创建的一种动态链接库,它不依赖Microsoft Foundation Classes (MFC) 库。MFC是微软提供的一套C++类库,用于简化Windows应用程序开发,但非MFC DLL则更加轻量级,更适合...
非MFC DLL不依赖于MFC库,而是直接使用Windows API或其他非MFC库进行开发。创建这样的DLL需要以下步骤: 1. **项目设置**:创建一个新的Win32 Dynamic-Link Library项目。在Visual Studio中,选择“文件”->“新建...
### 非MFC简单DLL编程,C++ #### 概述 动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统中的一个重要组成部分,用于存放可由多个程序同时使用的代码和数据。通过使用DLL,可以有效地减少内存占用量...
非MFC(Microsoft Foundation Classes)DLL是指不依赖MFC库的DLL,它可以直接使用标准C++或Windows API进行编程。本文将详细讲解如何创建和使用非MFC DLL。 首先,创建一个简单的DLL项目。在Visual Studio中,选择...
非MFC(Microsoft Foundation Classes)DLL是在Windows操作系统中创建动态链接库的一种方法,它不依赖于MFC库,而是直接使用Windows API和其他基础系统服务。本实例是使用VC6.0++编译器来实现的一个具体应用,适用于...
非MFC(Microsoft Foundation Classes)的DLL静态调用是指不依赖于MFC框架的DLL,而是通过标准的C/C++语言接口进行调用。这种调用方式更通用,不受特定框架限制,适用于任何不使用或轻量级使用MFC的应用程序。 首先...
非MFC(Microsoft Foundation Classes)的DLL意味着这个DLL不是基于MFC框架编写的,而是使用了更底层的API或者标准C++库。动态调用非MFC DLL涉及到一些关键的概念和技术,这里我们将深入探讨。 1. **DLL导出**:非...
1. **常规DLL**:这种类型的DLL通常包含MFC的成员函数,可以被其他MFC或非MFC应用程序调用。共享DLL中的MFC库需要与调用它的应用程序使用相同的MFC版本。 2. **扩展DLL**:扩展DLL允许你添加新的MFC类,这些类可以...
MFCDLL非模态.zip是一个包含有关MFC(Microsoft Foundation Class)库中DLL(动态链接库)使用的资源包。这个包特别关注如何在非模态状态下实现DLL的界面封装和调用,这意味着用户可以在与主应用程序交互的同时打开...
在本文中,我们将深入探讨如何使用Visual Studio 2019 (VS2019) 创建和使用MFC (Microsoft Foundation Class) DLLs,特别是针对MFC常规库和扩展库的封装与非模态调用。MFC是C++的一个类库,它为Windows应用程序开发...
本篇将聚焦于非MFC(Microsoft Foundation Classes)的DLL编程,这是一种在不依赖MFC框架的情况下,利用DLL实现功能模块化的方式。 DLL的优点在于它可以被多个进程共享,减少内存占用,同时也方便了代码的更新和...
在DLL的入口点函数DllMain方面,非MFC DLL需要由程序员自行提供,而MFC规则DLL则使用CWinApp对象的InitInstance和ExitInstance方法。MFC扩展DLL则由MFC DLL向导自动生成DllMain函数,简化了开发过程。 在MFC扩展DLL...
10. **MFCDLL.ncb**:Visual Studio的非编译信息文件,存储调试信息。 创建MFC DLL的过程如下: 1. **启动新项目**:在Visual Studio 2005中,选择“新建项目”,然后在模板中选择MFC DLL。这将生成一个基础框架,...
这个名为"MFCDll.rar"的压缩包文件显然包含了关于MFC动态链接库(DLL)的实例和相关资源。动态链接库是一种共享代码的方式,使得多个程序可以同时使用同一份代码,从而节省内存并提高系统效率。 在Windows环境下,...
### VC++动态链接库编程之非MFC_DLL #### 知识点概述: 本文将详细介绍如何在VC++中创建和使用非MFC的动态链接库(Dynamic Link Library,简称DLL)。我们将通过一个简单的示例来讲解DLL的基本概念、创建方法以及...
在“mfcdll.rar_MFCdll_mfc dll download”这个压缩包中,提供的可能是一个包含了MFC DLL文件的集合,用于静态链接或动态链接到用户的项目中。 **MFC库的介绍:** MFC提供了一个面向对象的接口,用于访问Windows ...
MFCDLL.rar_MFCdll_mfc dll 这个压缩包主要涉及的是Microsoft Foundation Class (MFC) 库的使用,特别是在VC++开发环境中的实践应用。MFC 是微软提供的一套C++类库,用于简化Windows应用程序的开发,它封装了大量的...
这种方式需要在DLL和主程序中都包含MFC库的动态链接版本(通常为msvcrt.dll和mfcmfc*.dll)。以下步骤概述了动态调用过程: 1. 创建MFC DLL项目:在Visual Studio中,选择MFC DLL模板,确保选中“Use MFC in a ...
本文将深入探讨MFC扩展DLL(Dynamic Link Library)中的导出类技术,帮助你理解如何创建和使用这类DLL。 MFC扩展DLL与常规DLL的主要区别在于它允许直接使用MFC类。这使得DLL可以包含MFC的成员函数,从而能够更方便...
MFCDLL调用方法是Windows编程中的一种常见技术,它涉及到动态链接库(DLL)的使用,特别是MFC(Microsoft Foundation Classes)库中的DLL。在Windows应用程序开发中,DLL能够帮助我们实现代码重用,减少内存占用,并...