dll(动态链接库)的创建和使用
控件注册方法

控件注册方法控件是计算机程序中常用的一种元素,用于显示和交互。
在开发应用程序时,我们常常需要使用各种控件来实现各种功能。
但是,要使用一个控件,必须先将其注册到系统中,才能够在程序中使用。
本文将介绍几种常见的控件注册方法。
一、动态链接库(DLL)注册DLL是一种包含可重用代码和数据的文件,它可以被多个程序同时使用。
在使用DLL中的控件之前,我们需要先将DLL文件注册到系统中。
注册DLL文件的方法有两种:一种是使用Regsvr32命令,另一种是使用注册表编辑器。
1. 使用Regsvr32命令注册DLL文件的方法如下:a. 打开命令提示符窗口,定位到DLL文件所在的目录;b. 输入命令“Regsvr32 文件名.dll”,其中“文件名.dll”是要注册的DLL文件名;c. 按下回车键,等待注册完成的提示信息。
2. 使用注册表编辑器注册DLL文件的方法如下:a. 打开注册表编辑器,定位到HKEY_CLASSES_ROOT\CLSID;b. 在CLSID下创建一个新的子项,子项的名称是要注册的DLL 文件的GUID;c. 在新的子项下创建一个新的子项,子项的名称是控件的类名;d. 在控件的类名下创建一个新的子项,子项的名称是控件的版本号;e. 在控件的版本号下创建一个新的子项,子项的名称是InprocServer32;f. 在InprocServer32下创建一个新的字符串值,值的名称是“Default”,值的数据是DLL文件的完整路径。
二、ActiveX控件注册ActiveX控件是一种可以在Web浏览器中使用的控件,它可以用于实现各种动态交互的功能。
要使用ActiveX控件,我们需要先将其注册到系统中。
注册ActiveX控件的方法有两种:一种是使用Regsvr32命令,另一种是使用注册表编辑器。
1. 使用Regsvr32命令注册ActiveX控件的方法与注册DLL文件类似。
2. 使用注册表编辑器注册ActiveX控件的方法如下:a. 打开注册表编辑器,定位到HKEY_CLASSES_ROOT\CLSID;b. 在CLSID下创建一个新的子项,子项的名称是控件的GUID;c. 在新的子项下创建一个新的子项,子项的名称是控件的类名;d. 在控件的类名下创建一个新的子项,子项的名称是控件的版本号;e. 在控件的版本号下创建一个新的子项,子项的名称是InprocServer32;f. 在InprocServer32下创建一个新的字符串值,值的名称是“Default”,值的数据是控件的完整路径。
MFC动态链接库的创建和调用(类和函数的dll导出和调用)

1.新建MFC DLL工程,取名为:DLL0410
动态链接库的创建和调用(类,函数的DLL导出和调用)
2.在工程中编辑好DLL0410.h,DLL0410.cpp,DLL0410.def三个文件后编译生成对应的dll和lib文件
2.1 DLL0410.h
2.2 DLL0410.cpp
2.3 DLL0410.def
2.4 编辑好上面的3个文件编译后,用dumpbin命令查看是否有函数导出。
(如图所示,sub全局函数和add类的成员函数已经导出)
3.新建一个工程DLL0410test将生成的DLL0410.dll,DLL0410.lib以及DLL0410.h文件拷贝到 DLL0410test工程目录下
4.静态调用:在工程的DLL0410test.cpp文件中导入头文件DLL0410.h,并编写对应的静态调用代码。
同时也要在工程属性链接中加入DLL0410.lib文件。
(如果编译出错有可能是,工程属性中的常规>>字符集>>修改为 使用多字节字符集)
运行成功
5.4.动态调用:只需将生成的DLL0410.dll文件拷贝到新建工程目录下,直接在工程的
DLL0410test.cpp中编写动态调用代码即可。
不用做其他任何连接和导入头文件的操作。
运行成功。
Windows动态链接库DLL使用

Windows动态链接库DLL使⽤⼀、概念DLL:Dynamic Link Library,即动态链接库,这种库包含了可由多个程序同时使⽤的代码和数据。
它是microsoft在windows操作系统中实现共享函数库概念的⼀种实现⽅式。
其中windows中⼀些作为DLL实现的⽂件有:ActiveX控件(.ocx)⽂件:如windows上的⽇历控件。
控制⾯板(.cpl)⽂件:控制⾯板中的每⼀项都是⼀个专⽤的DLL。
设备驱动程序(.drv)⽂件:如控制打印到打印机的打印机驱动程序。
⼆、由来DLL最初⽤于节约应⽤程序所需要的磁盘和内存空间。
早前,在传统的⾮共享库中,⼀部分代码简单地附加到调⽤的程序中。
如果两个程序同时调⽤同⼀个⼦程序,就会出现两份那段代码。
相反,许多应⽤共享的代码能够切分到⼀个DLL中,在硬盘上存为⼀个⽂档,在内存中只需使⽤⼀个实例。
三、DLL的优缺点优点:(1)节省内存和代码重⽤:当多个程序使⽤同⼀个函数库时,DLL可以减少在磁盘和物理内存中加载代码的重复量,且有助于代码的重⽤。
(2)模块化:DLL有助于促进模块式程序开发。
模块化允许仅仅更改⼏个应⽤程序共享使⽤的⼀个DLL中的代码和数据⽽不需要更改应⽤程序⾃⾝。
这种模块话的基本形式允许如Microsoft Office、Microsoft Visual Studio、甚⾄windows⾃⾝这样⼤的应⽤程序使⽤较为紧凑的补丁和服务包。
缺点:DLL Hell:即DLL地狱,指⼏个应⽤程序在使⽤同⼀个共享的DLL库时发⽣版本冲突。
究其原因,⼋个字:成也共⽤,败也共⽤。
因为DLL Hell正是由于动态链接库可与其他程序共⽤函数、资源所导致。
主要有两种情况:设想这样⼀个场景:程序A会使⽤1.0版本的动态链接库X,则在程序A安装到系统时,会同时安装该1.0版本的动态链接库X。
假设另⼀个程序B也会使⽤到动态链接库X,那么程序B直接复制到硬盘中即可正常运⾏,因为动态链接库已经存在于系统中。
VC6.0中,创建、调用 dll

[动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
DLL 还有助于共享数据和资源。
多个应用程序可同时访问内存中单个DLL 副本的内容。
动态链接库(Dynamic Link Library或者Dynamic-link library,缩写为DLL),是微软公司在微软视窗操作系统(即Windows操作系统)中实现共享函数库概念的一种方式。
这些库函数的扩展名是.DLL、.OCX(包含ActiveX控制的库)或者.DRV(旧式的系统驱动程序)。
动态链接库缩写为DLL,在电脑中可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
例如,您有一个大型网络游戏,如果把整个数百MB 甚至数GB的游戏的代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库(DLL)中,您无需重新生成或安装整个程序就可以应用更新。
]1.使用VC6.0 生成DLL新建项目“Win32 Dynamic-Link Library”,输入项目名称,确定后选择“A simple DLL project”点击“完成”。
以下为cpp文件自动生成的代码:#include "stdafx.h"BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){return TRUE;}编辑cpp文件:在#include "stdafx.h"的下一行加入extern "C" __declspec(dllexport) int fun(int a, int b);/*这是C格式导出函数;这种写法一般用在C++写的DLL中,指按C的规则导出这个函数,否则导出的函数会很怪; 加上extern "C" 表示按标准C格式导出函数.如果去掉仅兼容C++;其中int fun(int a, int b) 这部分代码是我们想用dll 实现的函数原型声明如果还想加入其他的可以继续加入extern "C" __declspec(dllexport) int fun1(int a, int b);*/DllMain 是DLL 的默认入口函数,类似于C语言的main函数,该例子无需修改此处,在DllMain 的后面加入:int fun(int a,int b){return a+b;}这就是我们想用DLL 实现的函数的定义,build 之后就会在debug 目录下生成我们想要的dll 文件2.调用DLL新建一个Win32 Console Application 工程,把刚才生成的dll 文件拷贝到工程的根目录下在stdafx.h 文件中加入:#include <windows.h>编辑cpp文件:#include "stdafx.h"typedef int (*PFUN)(int,int);void main(){HMODULE hModule = ::LoadLibrary("dlltest.dll");PFUN newfun = (PFUN)::GetProcAddress(hModule,"fun");int i = newfun(1,2);printf("The result is %d\n",i);::FreeLibrary(hModule);}然后,运行就可以看到结果了转VC6.0下调用Dll文件提供的函数接口和全局变量函数接口:首先把生成的Dll文件(如RegularDll.dll和RegularDll.lib)拷贝到当前工程所在文件夹,调用有两种方法:1)动态方法:使用LoadLibrary和GetProcAddress等函数,例typedef void (*lpFun)(void);HINSTANCE hDll;hDll = LoadLibrary("RegularDll.dll");if (NULL==hDll) {MessageBox("Dll load failed!");}lpFun pShowDlg = (lpFun)GetProcAddress(hDll,"ShowDlg");if (NULL == pShowDlg) {MessageBox("Load function \"ShowDlg\" failed!");}pShowDlg();*/2)静态声明方法:创建Dll的工程中,函数声明和定义时用_stdcall 修饰,例void _stdcall ShowDlg(void){...}在调用dll的工程的文件中,在文件头部声明库和函数,如下例#pragma comment(lib,"RegularDll.lib")void _stdcall ShowDlg(void);调用时直接ShowDlg()就可以了。
vs2010创建和使用动态链接库(dll)

vs2010创建和使用动态链接库(dll)1、打开Microsoft Visual Studio 2010,选择File->New->Project。
2、在New Project中选择Installed Templates->VisualC++->Win32。
3、选择Win32 Console Application,设置名称:simpledll,设置解决方案名:zdddll。
4、单击OK,在出现的Win32 Application Wizard的Overview 对话框中点击Next。
5、在Application Settings中,选择Application type下的DLL。
6、勾选Additional options下的Empty project。
7、单击Finish创建项目。
向动态链接库添加类:1、添加新类头文件。
右键单击simpledll项目,Add->New Item,选择Header File(.h),设置名称为simpledll,单击Add。
2、添加新类源文件。
右键单击simpledll项目,Add->New Item,选择C++ File(.cpp),设置名称为simpledll,单击Add。
3、为新类添加内容。
内容如下:头文件simpledll.h:[html] view plain copy print?//------------------ simpledll.h---------------- #pragma once; //该宏完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入//宏DLL_IMPLEMENT在simpledll.cpp中定义#ifdef DLL_IMPLEMENT #define DLL_API __declspec(dllexport) #else #define DLL_API__declspec(dllimport) #endif namespace zdd { //导出类class DLL_API SimpleDll { public: SimpleDll(); ~SimpleDll(); int add(int x, int y); //简单方法}; }源文件simpledll.cpp:[cpp] view plain copy print?//------------------ simpledll.cpp---------------- //注意此处的宏定义需要写在#include "simpledll.h"之前//以完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入#define DLL_IMPLEMENT#include "simpledll.h" namespace zdd{ SimpleDll::SimpleDll() { } SimpleDll::~SimpleDll() { } intSimpleDll::add(int x, int y) { returnx+y; } } 4、完成后点击Build->Build Solution,生成解决方案。
使用vs建立动态链接库dll过程和使用方法

使用vs建立动态链接库dll的过程和使用方法创建动态链接库(DLL)的过程可以分为几个步骤。
我将使用Visual Studio 来演示这个过程:创建DLL的步骤:1.打开Visual Studio,选择“文件”->“新建”->“项目”。
2.在新项目窗口中,选择“Visual C++”->“Windows桌面向导应用程序”。
3.输入项目名称和位置,然后点击“确定”。
4.在“解决方案资源管理器”中,右键单击项目名称->添加->新建项。
5.在“添加新项”窗口中,选择“DLL”,输入DLL名称,然后点击“添加”。
编写DLL代码:现在你已经有了一个空的DLL,你可以开始编写你的代码了。
例如,你可以添加以下代码到你的.cpp文件中:在这个例子中,我们创建了一个简单的函数add,它接收两个整数并返回它们的和。
extern "C"部分告诉编译器使用C链接规则创建导出函数,__declspec(dllexport)部分使得该函数可以从DLL中导出。
编译和生成DLL:在Visual Studio中,你可以通过点击“生成”菜单然后选择“生成解决方案”来编译和生成你的DLL。
如果编译成功,你可以在你的项目文件夹的Debug或Release 文件夹中找到生成的DLL文件。
使用DLL:使用DLL的过程可以分为几个步骤:1.加载DLL:使用Windows API函数LoadLibrary可以加载DLL。
例如:HMODULE hMod = LoadLibrary(TEXT("MyDLL.dll"));。
这个函数会返回一个模块句柄,如果DLL加载成功的话。
2.获取函数地址:使用GetProcAddress函数可以获取DLL中函数的地址。
例如:add_proc = (int (*)(int, int))GetProcAddress(hMod, "add");。
动态链接库的创建与使用

动态链接库的创建与使用动态链接库(Dynamic Link Library,DLL)是一种用于在Windows 操作系统中组织、存储和分发可执行代码和数据的文件格式。
DLL文件包含一组函数、变量和资源,可以与其他程序共享,以便提高应用程序的开发效率和运行速度。
1.创建DLL项目:首先,在开发环境中创建一个DLL项目。
可以使用开发工具如Visual Studio等来创建。
选择DLL项目后,在项目中添加需要的函数、变量和资源。
2.导出函数和变量:在DLL项目中,需要明确指定哪些函数和变量可以被外部程序调用。
可以通过将函数和变量声明为`__declspec(dllexport)`来实现。
这样,外部程序在调用时可以访问到这些函数和变量。
示例代码如下:```cpp__declspec(dllexport) int add(int a, int b)return a + b;}```3.编译DLL项目:在完成函数和变量的导出后,编译DLL项目生成DLL文件。
编译过程会把函数和变量编译成二进制代码,并生成DLL文件。
4.调用DLL:在外部程序中调用DLL中的函数和变量时,首先需要加载DLL文件,并获取对应的函数或变量的地址。
然后,可以使用加载的函数或变量来执行相应的操作。
示例代码如下:```cpp#include <windows.h>#include <iostream>using namespace std;typedef int (*AddFunc)(int, int);int mainHMODULE dllHandle = LoadLibrary("mydll.dll");if (dllHandle == NULL)cout << "Failed to load DLL." << endl;return 1;}AddFunc addFunc = (AddFunc)GetProcAddress(dllHandle, "add");if (addFunc == NULL)cout << "Failed to get address of function." << endl;FreeLibrary(dllHandle);return 1;}int result = addFunc(1, 2);cout << "Result: " << result << endl;FreeLibrary(dllHandle);return 0;}```在上述代码中,通过`LoadLibrary`函数加载DLL文件,并使用`GetProcAddress`函数获取函数地址,在调用函数时可以直接使用获取到的函数地址来执行相应的操作。
DLL文件的生成和引用方法

一、动态链接库什么是动态链接库?DLL三个字母对于你来说一定很熟悉吧,它是Dynamic Link Library 的缩写形式,动态链接库(DLL) 是作为共享函数库的可执行文件。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
函数的可执行代码位于一个DLL 中,该DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
DLL 还有助于共享数据和资源。
多个应用程序可同时访问内存中单个DLL 副本的内容。
和大多数程序员一样,你一定很使用过DLL吧。
也曾感受到它的带给你程序设计和编码上的好错吧今天我想和大家探讨一个主题:如何在C#创建和调用DLL(动态链接库), 其实在很大意义上而讲,DLL让我更灵活的组织编写我们的应用程序,作为软件设计者,可一个根据它来达到很高的代码重用效果。
下面我来介绍一下在C#中如何创建和调用DLL。
二、准备工作我们需要对我们接下来要做的事情做个简单的介绍,在本文我们将利用C#语言创建一个名为MyDLL.DLL的动态链接库,在这个动态链接库文件中我们将提供两个功能一个是对两个参数交换他们的值,另一个功能是求两个参数的最大公约数。
然后创建一个应用程序使用这个DLL。
运行并输出结果。
1、MySwap.csnamespace MyMethods{public class SwapClass{public static bool Swap(ref long i,ref long j){i = i+j;j = i-j;i = i-j;return true;}}}2、MyMaxCD.csnamespace MyMethods{public class MaxCDClass{public static long MaxCD(long i, long j){long a,b,temp;if(i>j){a = i;b = j;}else{b = i;a = j;}temp = a % b;while(temp!=0){a = b;b = temp;temp = a % b;}return b;}}}需要注意的是:我们在制作这两个文件的时候可以用Visual 或者其他的文本编辑器,就算是记事本也可以。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dll的创建和使用使用C++语言创建dll并使用该dll的演示、说明Dll的创建和使用第一部分创建C风格的dll (4)步骤1:创建dll工程 (4)步骤2:文件改名 (5)步骤3:拷贝文件内容 (6)步骤4:从工程中删掉文件main.cpp,main.h (7)步骤5:继续修改文件mydll.h和mydll.cpp (7)步骤6:编译并生成dll文件 (8)第二部分以间接调用的方式使用.dll (10)步骤1:新建一个控制台工程(UseDll.cbp). (10)步骤2:修改main.cpp。
(11)步骤3:编译,生成UseDll.exe (12)步骤4:拷贝mydll.dll到UseDll.exe所在目录 (13)步骤5:执行UseDll.exe,输出: (13)间接调用Dll的好处 (14)第三部分以直接调用的方式使用.dll (15)步骤1:改写main.cpp (15)步骤2:添加mydll.dll的静态导出库到UseDll工程中 (16)步骤3:编译并执行,输出 (17)直接调用的好处 (18)Dll的优势 (18)调用约定的说明 (18)第四部分创建C++风格的dll(本地方法) (19)步骤1:在mydll.h中新增导出的类 (19)步骤2:在mydll.cpp中实现Cat类 (19)步骤3:编译MyDll,生成mydll.dll,mydll.a (21)第五部分使用本地风格的C++ DLL (22)步骤1:修改UseDll中的main.cpp (22)步骤2:将mydll.a添加到UseDll工程的BuildOptions中 (23)步骤3:编译UseDll工程,生成UseDll.exe (23)步骤4:将MyDll.dll拷贝到UseDll.exe目录下 (23)步骤5:执行UseDll.exe,输出 (23)本地风格的不足 (24)第六部分创建推荐风格的C++ DLL (26)步骤1:修改mydll.h,创建Cat的接口类ICat (26)步骤2:新建类Cat (27)步骤3:实现createCat函数 (29)步骤4:编译,生成mydll.dll (31)第七部分使用推荐风格的C++ DLL (32)步骤1:修改UseDll中的main.cpp (32)步骤2:将第六部分生成的libmydll.a添加到UseDll的BuildOptions中 (33)步骤3:编译UseDll工程,生成useDll.exe (34)步骤4:将第六部分生成的mydll.dll拷贝到UseDll.exe所在文件目录 (34)步骤5:执行,输出 (35)推荐风格的好处: (35)第一部分创建C风格的dll下面以CodeBlocks为例演示说明创建和使用dll,其它开发环境类似步骤1:创建dll工程创建dll工程MyDll.cpp步骤2:文件改名新建两个文件mydll.h和mydll.cpp步骤3:拷贝文件内容将main.h中的核心内容拷贝到mydll.h中再将main.cpp中的部分内容拷贝到mydll.cpp中,并更改include文件名。
( 函数DllMain 的缺省实现也可以去掉)步骤4:从工程中删掉文件main.cpp,main.h 步骤5:继续修改文件mydll.h和mydll.cpp 在mydll.h中添加两个函数, add和value在mydll.cpp中给出这两个函数的实现。
步骤6:编译并生成dll文件点击齿轮图标(编译),生成dll文件。
打开我的电脑或资源管理器,可以查看生成的文件目录。
E:\WorkSpace\CodeBlocksApps\MyDll目录下(本演示的工程目录):E:\WorkSpace\CodeBlocksApps\MyDll\bin\Debug:(若选择Release版,则Release子目录)至此:我们就得到了四个有用的文件。
Mydll.h: 头文件。
编写调用该dll的exe工程时,要用到。
Mydll.dll :目标dll文件,要随调用该dll的exe文件一起发布。
libmydll.a: 含有mydll.dll中导出函数的地址信息的静态库。
在编译调用方的工程时,在链接(Link)阶段, 可能会用到。
在使用其他平台和其他编译器时,该文件的扩展名可能为.lib.libMydll.def :导出函数的定义文件(文本文件),内容如下:第二部分以间接调用的方式使用.dll (使用上边创建的mydll.dll)步骤1:新建一个控制台工程(UseDll.cbp).步骤2:修改main.cpp。
//main.cpp#include <iostream>using namespace std;#include "..\\MyDll\\mydll.h"int main(){typedef void (*FuncTypeSome)(LPCSTR);typedef int (*FuncTypeAdd)(int);typedef float (*FuncTypeVal)(float,float);HINSTANCE hDll = LoadLibrary("MyDll.dll");if (hDll==nullptr) {cout<<"Load Library Failed."<<endl;return 1;}FuncTypeSome some = (FuncTypeSome)GetProcAddress(hDll,"SomeFunction");FuncTypeAdd addFunc = (FuncTypeAdd)GetProcAddress(hDll,"add");FuncTypeVal valFunc = (FuncTypeVal)GetProcAddress(hDll,"value");some("Call SomeFunction.");cout<<"add(88)="<<addFunc(88)<<endl;cout<<"value(2.5,1.2)="<<valFunc(2.5,1.2)<<endl;FreeLibrary(hDll);cout << "Hello world!" << endl;return 0;}这部分说明:LoadLibrary()是Window API函数,加载库文件,返回一个指针(也称句柄)。
typedef void (*FuncType)(const LPCSTR),是声明类型名FuncType,表示FuncType的每一个变量都是形如void XXXX(const LPCSTR)的某个函数。
GetProcAddress也是Window API函数,取得库中指定名字的函数入口地址。
如图:步骤3:编译,生成UseDll.exe步骤4:拷贝mydll.dll到UseDll.exe所在目录步骤5:执行UseDll.exe,输出:间接调用Dll的好处程序员可以在程序中(如UseDll.exe)中,动态地(或者称运行时期)决定具体调用哪个dll中的的哪个函数。
例如,plug_in(插件)就是一个dll,通常就需要这种方式决定调用哪个插件中的函数。
第三部分以直接调用的方式使用.dll (使用上边创建的mydll.dll)步骤1:改写main.cpp(注释掉部分,改用原始名字调用,最后代码如下)// main.cpp#include <iostream>using namespace std;#include "..\\MyDll\\mydll.h"int main(){/**typedef void (*FuncTypeSome)(LPCSTR);typedef int (*FuncTypeAdd)(int);typedef float (*FuncTypeVal)(float,float);HINSTANCE hDll = LoadLibrary("MyDll.dll");if (hDll==nullptr) {cout<<"Load Library Failed."<<endl;return 1;}FuncTypeSome some = (FuncTypeSome)GetProcAddress(hDll,"SomeFunction");FuncTypeAdd addFunc = (FuncTypeAdd)GetProcAddress(hDll,"add");FuncTypeVal valFunc = (FuncTypeVal)GetProcAddress(hDll,"value");some("Call SomeFunction.");cout<<"add(88)="<<addFunc(88)<<endl;cout<<"value(2.5,1.2)="<<valFunc(2.5,1.2)<<endl;FreeLibrary(hDll);**/SomeFunction("Call SomeFunction");cout<<"add(88)="<<add(88)<<endl;// mydll.h中的原始名字cout<<"value(2.5,1.2)="<<value(2.5,1.2)<<endl; // mydll.h中的原始名字cout << "Hello world!" << endl;return 0;}如图:步骤2:添加mydll.dll的静态导出库到UseDll工程中此时编译,会报错。
如图:表明编译器在链接(Link)时,找不到三个函数_imp__SomeFunction, _imp__add,_imp__value 的入口地址,也就是没找到这三个函数的具体实现部分。
但这三个函数的名字明显不是我们自己定义的,实际上这些名字是mydll.dll中对SomeFunction,add,value函数的内部表示名,他们的实现必定在mydll.dll中,而不会在UseDll工程中,当然就找不到了。