`

VC++6.0 DLL

 
阅读更多

一、静态连接库:.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 DLL 示例

    VC++ 6.0是Microsoft Visual C++的一个经典版本,它提供了创建DLL项目的功能。下面将详细阐述如何在VC++ 6.0中创建DLL以及如何在其他语言中调用这些DLL中的函数。 1. **创建DLL项目**: 在VC++ 6.0中,选择"文件" ...

    VC++6.0 支持win7

    **VC++6.0在Windows 7环境下的兼容性与使用指南** Visual C++ 6.0(简称VC++6.0)是微软发布的一款经典且功能强大的C++集成开发环境,它在20世纪90年代末期推出,成为许多开发者编写Windows应用程序的首选工具。...

    VC++6.0 win10(免安装,修复打开bug,MFC的dll的bug)

    在Windows 10中,由于系统内核和安全策略的改变,可能会导致VC++6.0无法正常运行,例如打开时出现错误,或者MFC库的某些动态链接库(DLL)无法找到。 **三、修复打开bug** 在Windows 10上使用VC++6.0时,可能会遇到...

    vc++ 6.0使用dbghelp.dll生成dmp内存转储文件

    本文将详细讲解如何利用VC++ 6.0和dbghelp.dll库来生成DMP文件。 首先,dbghelp.dll是Windows操作系统中用于调试帮助的动态链接库,它提供了诸如堆栈回溯、模块信息获取、符号加载等功能。在VC++ 6.0中,通过调用这...

    vc++6.0小插件

    在描述中提到的"vc++6.0小插件",是为增强VC++ 6.0基本功能而设计的一些第三方工具,它们能够提供额外的辅助功能,提升编程效率。这些插件通常由开发者社区贡献,旨在解决原生IDE中的一些不足,例如代码提示、调试...

    VC++6.0入门教程

    VC++6.0 是 Microsoft 公司推出的一个功能强大且广泛使用的集成开发环境(IDE),它提供了一个全面的开发平台,允许开发者创建Windows应用程序、控制台应用程序、DLL库、静态库等各种类型的项目。下面是 VC++6.0 的...

    Win10下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简介** VC++6.0是Microsoft公司开发的一款集成开发环境,全称为Visual C++ 6.0。它集成了C++编译器、调试器和其他工具,方便开发者进行Windows应用程序的编写。这个版本在当时非常流行,尽管现在有了更新的...

    win7装VC++6.0.rar

    《在Win7系统中成功安装VC++6.0的详细指南》 对于许多开发者来说,Visual C++ 6.0(简称VC++6.0)是一款经典的编程工具,尽管它在2003年就已经停止更新,但因其简洁的界面和高效的工作流程,至今仍被一部分程序员所...

    VC++ 6.0 Open Bug问题

    - 使用 VC++ 6.0 编译 `FileTool.dll` 文件,确保其能够正常工作。 - 注意:如果编译出现问题,请检查相关的源代码和编译设置。 4. **卸载 FileTool 扩展** - 在 VC++ 6.0 中选择 “Tools” -> “Customize”,...

    VC++6.0培训教程

    《VC++6.0培训教程》是一本专为学习Visual C++ 6.0编程语言设计的教材,由西南交通大学的周颖恒编著。这本书旨在帮助初学者和有一定基础的程序员逐步掌握VC++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 ...

    vc++6.0win10完全兼容版

    描述中提到的“兼容win10的vc++6.0”意味着该版本已经解决了在Windows 10环境下常见的安装、运行错误,如找不到特定的动态链接库(DLL)文件、界面显示异常等。这对于那些习惯使用VC++ 6.0或者无法升级到新版本开发...

    Win7兼容VC++6.0的dll

    标题 "Win7兼容VC++6.0的dll" 指的是解决在Windows 7操作系统上运行Microsoft Visual C++ 6.0 (简称VC++6.0)时可能遇到的兼容性问题。这款古老的开发环境在设计时主要是针对Windows 98和Windows XP等较早的操作系统...

    VC++6.0无法打开文件或工程解决插件

    通常,安装过程包括将`FileTool.dll`复制到VC++6.0安装目录下的相应文件夹,如`\Microsoft Visual Studio\Common\MSDev98\AddIns`,然后按照说明中的步骤进行操作,可能需要重新启动VC++6.0或者执行特定的注册命令以...

    Vc++6.0打不开文件方法

    在使用Microsoft Visual C++ 6.0(简称Vc++6.0)进行编程时,有时可能会遇到无法正常打开或编译源代码文件的问题。这可能是由多种原因引起的,包括但不限于配置错误、环境变量问题、系统兼容性以及第三方库的冲突等...

    VC++ 6.0 培训教程

    在VC++ 6.0 中,开发者可以选择创建静态库(.lib)或动态库(.dll)。静态库在编译时会被直接链接到可执行文件中,而动态库则在运行时被加载。两者各有优缺点,根据项目需求选择合适的方式。 **7. 并发编程** VC++ ...

    VC++6.0 安装包,及Windows10安装解决方案

    3. **手动安装必要组件**:可能需要手动安装一些系统缺少的、与VC++6.0兼容的动态链接库(DLL)文件。 4. **使用第三方补丁**:有一些第三方社区提供的补丁,如“Visual C++ 6.0 Service Pack 7 Build 2552”,可以...

    vc++6.0技术内幕

    6. **动态链接库与ActiveX**:VC++6.0支持创建和使用DLL(动态链接库),以及开发ActiveX控件,这些都是Windows平台上常见的组件化开发方式。书中将介绍如何创建和使用这两种技术,以及它们在软件复用和组件化开发中...

    数据库编程大全(VC++ 6.0源代码)

    "vc++6.0数据库编程大全(代码)"这个文件很可能包含了上述所有概念的实例代码,帮助读者深入理解并实践数据库编程。通过研究这些源代码,开发者可以学习到如何在实际项目中有效地使用VC++ 6.0进行数据库操作,这...

Global site tag (gtag.js) - Google Analytics