摘要:
DLL中调用约定和名称修饰(二)4、thiscallthiscall调用约定是C++中的非静态类成员函数的默认调用约定。thiscall只能被编译器使用,没有相应的关键字,因此不能被程序员指定。采用thiscall约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,只是另外通过ECX寄存器传送一个额外的参数:this指针。这次的例子中将定义一个类,并在类中定义一个成员函数,代码如下:class CSum {public:int Add(int a, int b){return (a + b);}};void main(){ CSum sum; sum.Add(1, . 阅读全文
摘要:
DLL(Dynamic Link Libraries)专题: 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的EXE程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。 Windows系统平台上提供了一. 阅读全文
摘要:
在讨论关于动态链接到MFC的DLL的模块状态问题之前,先来看一个例子。本例可以通过如下步骤来完成: 1)在VC菜单中File->New新建一个命名为DLLShared的MFC AppWizard的工程,下一步选择Regular DLL using shared MFC DLL。2)在工程中添加一个对话框资源,其ID为:IDD_ABOUTBOX。并在resource.h之中将IDD_ABOUTBOX 的数值改为100。3)在DLLShared.cpp中定义如下函数:void ShowDlg(){ CDialog dlg(IDD_ABOUTBOX); dlg.DoModal();}4)在DL 阅读全文
摘要:
基础慨念1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的 EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动.. 阅读全文
摘要:
VC++动态链接库编程之MFC规则DLL 第4节我们对非MFC DLL进行了介绍,这一节将详细地讲述MFC规则DLL的创建与使用技巧。 另外,自从本文开始连载后,收到了一些读者的e-mail。有的读者提出了一些问题,笔者将在本文的最后一次连载中选取其中的典型问题进行解答。由于时间的关系,对于读者朋友的来信,笔者暂时不能一一回复,还望海涵!由于笔者的水平有限,文中难免有错误和纰漏,也热诚欢迎读者朋友不吝指正! 5. MFC规则DLL 5.1 概述 MFC规则DLL的概念体现在两方面: (1) 它是MFC的 “是MFC的”意味着可以在这种DLL的内部使用MFC; (2) 它是规... 阅读全文
摘要:
(Win32 DLL 工程,或者其他Console或MFC工程等)1。在VC编译器中,选择Insert --》Resource,选中Bitmap--》Import,将文件类型修改为所有类型。---》找到bmp文件,并载入,此时产生一个IDB_BITMAP1资源句柄。2。载入后,先别急,保存一次,则会产生这个bmp文件对应的rc资源文件。3。这个时候,如果不是MFC工程,则需要在调用LoadImage或LoadBitmap函数的.CPP文件中,先包含一句:#include "resource.h"如此,则之前产生的IDB_BITMAP1资源句柄可以被使用了,如果没有包含这个头 阅读全文