VC++创建与调用DLL动态链接库教程

5星 · 超过95%的资源 需积分: 3 103 下载量 72 浏览量 更新于2024-09-19 收藏 144KB DOC 举报
"这篇内容主要介绍了如何使用VC++来创建和调用DLL动态链接库。首先,通过创建一个非MFC的Win32 Dynamic-Link Library工程`dllTest`,来实现一个简单的加法功能。在`lib.h`头文件中,使用`extern "C"`和`__declspec(dllexport)`关键字来导出函数`add`,使其可以在其他程序中调用。`lib.cpp`文件包含了`add`函数的实现,即两个整数相加。接着,创建了一个名为`dllCall`的应用程序工程,用于调用`dllTest`中的`add`函数。在`dllCall`的`main`函数中,使用`LoadLibrary`函数加载DLL,`GetProcAddress`获取`add`函数的地址,然后通过函数指针调用`add`并打印结果,最后释放DLL句柄。" 详细知识点: 1. 动态链接库(DLL): DLL是一种可被多个程序共享的代码库,可以减少内存占用和提高程序的执行效率。VC++允许开发者创建和使用DLL。 2. 创建DLL: 使用VC++新建一个非MFC的Win32 Dynamic-Link Library工程。选择这个选项避免了使用MFC框架,使得DLL更通用。 3. 导出函数: 在DLL中,需要使用`extern "C"`来确保函数的C语言调用约定,避免名称修饰问题。同时,`__declspec(dllexport)`关键字用于声明函数为导出函数,以便外部程序能够访问。 4. lib.h头文件: 包含导出函数的声明,`__declspec(dllexport)`只在生成DLL时使用。在客户端应用中,应使用`__declspec(dllimport)`来导入函数。 5. lib.cpp源文件: 定义了`add`函数的具体实现,这里只是一个简单的加法操作。 6. 调用DLL: 在客户端应用程序中,使用`LoadLibrary`函数加载DLL文件,得到DLL句柄`hDll`。然后,`GetProcAddress`函数根据函数名获取函数地址,存储在函数指针`lpAddFun`中。这样,就可以通过函数指针调用DLL中的`add`函数。 7. FreeLibrary: 当不再需要DLL时,应使用`FreeLibrary`释放DLL句柄,释放系统资源。 8. 函数指针: 在`dllCall`工程中,定义了`lpAddFun`类型的函数指针,用来存储从DLL中获取的`add`函数地址。调用函数时,通过函数指针调用,而不是直接调用函数名,这是因为函数是在运行时动态获取的。 9. 动态链接与静态链接的区别: 静态链接是在编译时将库函数合并到可执行文件中,而动态链接则是在运行时才加载库函数,使得程序更加灵活且节省内存。 10. 命名空间与C++名字修饰: `extern "C"`的作用是避免C++的名称修饰,使得C++编译器生成的函数名称保持原始形式,与C语言兼容,因为DLL的导出通常遵循C语言的调用约定。 总结,这篇文章展示了如何使用VC++创建一个简单的DLL以及如何在另一个应用程序中调用这个DLL的导出函数,涉及到的关键技术包括DLL的创建、导出函数声明、动态链接的使用以及函数指针的应用。