一、静态连接库:.LIB;
动态链接库:.DLL;
二、动态链接库的好处:
2.1、主要是代码的共享;
三、Win32 DLL 的创建和使用
文件->新建->工程:Win32 Dynamic-Link Library
PS:中间碰到一个很奇怪的问题,我新建一个cpp文件后,怎么编译在Debug文件夹下都没有dll文件,重新建立工程2次都没有。但是后来又成了。我估计是我的文件名称写错了,将cpp写成app了!浪费了一个半小时!!!!
3.1、从DLL中导出函数
a、在函数前面加"_declspec(dllexport)"。例如 _declspec(dllexport) int add(int a, int b){};
b、用命令dumpbin命令查看dll文件导出的函数。例如 dumpbin DLL1.dll;
四、隐式链接方式加载DLL
4.1、利用extern声明外部函数
例如:extern int add(int a, int b); 在这句代码的后面,EXE程序就可以调用add函数了。
4.2、dumpbin 命令不只可以查看dll的导出函数,也可以查看exe调用的函数。例如:dumpbin -imports DllTest.exe。可以查看EXE程序调用了哪些dll函数(即上面4.1提到的用extern声明的外部函数);
4.3、Depands工具
该工具是实现了dumpbin同样功能的一个可视化工具。用其打开一个EXE,可查看该EXE调用的DLL和该DLL的导出函数。如果用来查看DLL,可以查看该DLL导出的函数;
4.4、利用_declspec(dllimport)声明外部函数
用"_declspec(dllimport)"可以和“extern”实现同样的功能,例如:
_declspec(dllimport) int add(int a, int b);
但是,如果调用的是动态库的话,"_declspec(dllimport)"命令可以是"编译器"生成“效率更高”的代码。
Q:为什么"_declspec(dllimport)"会令编译器生成效率更高的代码呢?
A:暂时不知!
五、从DLL中导出C++类
5.1、导出C++类的方法
class_declspec(dllexport) 类名{};
5.2、导出C++类中的函数的方法
例如:
class /*DLL1_API*/
Point
{
public:
void DLL1_API output(int x, int y);
void test();
};
此段代码就是讲类Point中的output函数导出,而test函数没有导出。在用命令dumpbin -exports DLL文件名 查看时,发现只导出类output函数,没有导出Point类。
六、解决名字改编问题
6.1、利用限定符:extern “C" 可以解决C++和C语言之间相互调用时函数命名的问题。但是这种方法有一个缺陷,就是不能用于导出一个类的成员函数,只能导出全局函数这种情况;
PS:如果再DLL需要导出的函数前面加上extern ”C"那么,C++写的DLL就可以被C写的客户端调用;
6.2、DEF文件的方式,可以让_stdcall的函数名称不改变,并且可以设定函数名称。包括类函数的名称。但是能不能定义类的名称暂时不知道。
七、显示加载方式加载DLL
简单介绍:主要通过
HMODULE LoadLibrary(LPCTSTR lpFileName);
FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
两个函数来实现动态加载的。不需要在工程->设置->连接 里面设置lib。
静态加载在程序启动的时候就已经被加载到内存中了,而动态加载会在程序启动以后,调用时再加载到程序当中。节约内存,并且动态加载DLL的EXE,用工具或命令无法查看到相关调用信息。
7.1、根据函数名称动态加载DLL。函数名称,或者是名字改编的字符串(即用dumpbin -exports 命令查看的函数名称字符串);
72.、 也可以根绝序号调用DLL的函数,这样无论DLL的函数名称是否改编,只要知道需要可参数结构就可以调用。需要用到宏MAKEINTRESOURCE。例如:
MAKEINTSOURCE(1)表示需要为1的函数。
7.3、DllMain函数
7.4、MFC DLL
7.5、当动态加载链接库使用完毕后,最好能将DLL释放掉。用函数:
BOOL FreeLibrary(HMODULE hModule);
PS:有很多都很模糊,以后补充。
分享到:
相关推荐
VC++ 6.0是Microsoft Visual C++的一个经典版本,它提供了创建DLL项目的功能。下面将详细阐述如何在VC++ 6.0中创建DLL以及如何在其他语言中调用这些DLL中的函数。 1. **创建DLL项目**: 在VC++ 6.0中,选择"文件" ...
**VC++6.0在Windows 7环境下的兼容性与使用指南** Visual C++ 6.0(简称VC++6.0)是微软发布的一款经典且功能强大的C++集成开发环境,它在20世纪90年代末期推出,成为许多开发者编写Windows应用程序的首选工具。...
在Windows 10中,由于系统内核和安全策略的改变,可能会导致VC++6.0无法正常运行,例如打开时出现错误,或者MFC库的某些动态链接库(DLL)无法找到。 **三、修复打开bug** 在Windows 10上使用VC++6.0时,可能会遇到...
本文将详细讲解如何利用VC++ 6.0和dbghelp.dll库来生成DMP文件。 首先,dbghelp.dll是Windows操作系统中用于调试帮助的动态链接库,它提供了诸如堆栈回溯、模块信息获取、符号加载等功能。在VC++ 6.0中,通过调用这...
在描述中提到的"vc++6.0小插件",是为增强VC++ 6.0基本功能而设计的一些第三方工具,它们能够提供额外的辅助功能,提升编程效率。这些插件通常由开发者社区贡献,旨在解决原生IDE中的一些不足,例如代码提示、调试...
VC++6.0 是 Microsoft 公司推出的一个功能强大且广泛使用的集成开发环境(IDE),它提供了一个全面的开发平台,允许开发者创建Windows应用程序、控制台应用程序、DLL库、静态库等各种类型的项目。下面是 VC++6.0 的...
**VC++6.0在Win10环境下的安装与使用** **一、VC++6.0简介** 微软的Visual C++ 6.0是经典的C++集成开发环境(IDE),它于1998年发布,是许多程序员的启蒙工具。尽管后续版本如Visual Studio 2019等提供了更多的功能...
**VC++6.0简介** VC++6.0是Microsoft公司开发的一款集成开发环境,全称为Visual C++ 6.0。它集成了C++编译器、调试器和其他工具,方便开发者进行Windows应用程序的编写。这个版本在当时非常流行,尽管现在有了更新的...
《在Win7系统中成功安装VC++6.0的详细指南》 对于许多开发者来说,Visual C++ 6.0(简称VC++6.0)是一款经典的编程工具,尽管它在2003年就已经停止更新,但因其简洁的界面和高效的工作流程,至今仍被一部分程序员所...
- 使用 VC++ 6.0 编译 `FileTool.dll` 文件,确保其能够正常工作。 - 注意:如果编译出现问题,请检查相关的源代码和编译设置。 4. **卸载 FileTool 扩展** - 在 VC++ 6.0 中选择 “Tools” -> “Customize”,...
《VC++6.0培训教程》是一本专为学习Visual C++ 6.0编程语言设计的教材,由西南交通大学的周颖恒编著。这本书旨在帮助初学者和有一定基础的程序员逐步掌握VC++6.0的核心概念和技术,通过深入浅出的讲解,使读者能够...
**VC++6.0简介** Microsoft Visual C++ 6.0(简称VC++6.0)是微软公司推出的一款强大的C++集成开发环境,它在20世纪90年代末至21世纪初广泛应用于软件开发领域。这个版本的VC++6.0包含了Microsoft Foundation ...
描述中提到的“兼容win10的vc++6.0”意味着该版本已经解决了在Windows 10环境下常见的安装、运行错误,如找不到特定的动态链接库(DLL)文件、界面显示异常等。这对于那些习惯使用VC++ 6.0或者无法升级到新版本开发...
标题 "Win7兼容VC++6.0的dll" 指的是解决在Windows 7操作系统上运行Microsoft Visual C++ 6.0 (简称VC++6.0)时可能遇到的兼容性问题。这款古老的开发环境在设计时主要是针对Windows 98和Windows XP等较早的操作系统...
通常,安装过程包括将`FileTool.dll`复制到VC++6.0安装目录下的相应文件夹,如`\Microsoft Visual Studio\Common\MSDev98\AddIns`,然后按照说明中的步骤进行操作,可能需要重新启动VC++6.0或者执行特定的注册命令以...
在使用Microsoft Visual C++ 6.0(简称Vc++6.0)进行编程时,有时可能会遇到无法正常打开或编译源代码文件的问题。这可能是由多种原因引起的,包括但不限于配置错误、环境变量问题、系统兼容性以及第三方库的冲突等...
在VC++ 6.0 中,开发者可以选择创建静态库(.lib)或动态库(.dll)。静态库在编译时会被直接链接到可执行文件中,而动态库则在运行时被加载。两者各有优缺点,根据项目需求选择合适的方式。 **7. 并发编程** VC++ ...
3. **手动安装必要组件**:可能需要手动安装一些系统缺少的、与VC++6.0兼容的动态链接库(DLL)文件。 4. **使用第三方补丁**:有一些第三方社区提供的补丁,如“Visual C++ 6.0 Service Pack 7 Build 2552”,可以...
6. **动态链接库与ActiveX**:VC++6.0支持创建和使用DLL(动态链接库),以及开发ActiveX控件,这些都是Windows平台上常见的组件化开发方式。书中将介绍如何创建和使用这两种技术,以及它们在软件复用和组件化开发中...
"vc++6.0数据库编程大全(代码)"这个文件很可能包含了上述所有概念的实例代码,帮助读者深入理解并实践数据库编程。通过研究这些源代码,开发者可以学习到如何在实际项目中有效地使用VC++ 6.0进行数据库操作,这...