`

创建及使用DLL

c++ 
阅读更多
此篇仅作简要的记录,作为备忘。
更为详细的可以参考:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html
http://blog.csdn.net/ixsea/article/details/6676802
MS关于DLL的文档目录:http://msdn.microsoft.com/zh-cn/library/1ez7dh12.aspx
1、DLL的创建
官方文档:http://msdn.microsoft.com/zh-cn/library/ms235636.aspx
在VS中新建DLL工程,定义
#pragma once
#ifdef CREATEDLL_EXPORTS
#define CREATEDLL_API __declspec(dllexport)
#else
#define CREATEDLL_API __declspec(dllimport)
// Check windows
#if _WIN32 || _WIN64
#if _WIN64
#pragma comment(lib,"LBFGS_alglibDLLX64.lib")
#else
#pragma comment(lib,"LBFGS_alglibDLLX86.lib")
#endif
#endif
#endif

接下来,我们在创建DLL的工程中定义CREATEDLL_API,方法为:在工程属性页面下图所示位置加上CREATEDLL_API:


对于需要导出的函数(声明和定义两处都要),要这么写:
CREATEDLL_API int funcA(int a=1);

由于定义了CREATEDLL_API,相当于声明了:
__declspec(dllexport) int funcA(int a=1);

表明我们现在是要导出该函数funcA。写好函数后就可以编译了。
编译好之后,会生成 对应的lib文件和DLL文件。

2、DLL的使用
注意:程序运行时需要将DLL拷贝到程序所在目录,或者将DLL目录添加到环境变量Path中(添加完成后需要重启)。
方法1:隐式链接 Linking Implicitly
http://msdn.microsoft.com/zh-cn/library/d14wsce5.aspx
将之前写的头文件加入工程,该工程不要定义CREATEDLL_API
将生成的lib文件所在路径添加到工程的libarary directory中就可以编译了。

这里想多说一点的是:如果按我上面的头文件写法,编译器会自动选择对应的lib文件。无需在工程属性的linker->Input下手动输入要引入的lib文件了。
当然,前提是需要手动将DLL工程的输出DLL文件名进行更名,64位版本加了X64后缀,32位版本加了X86后缀。如下图所示:


方法2:显式链接 Linking Explicitly
http://msdn.microsoft.com/zh-cn/library/784bt7z7.aspx
参考官方文档或者之前给出的博文吧!
过程主要为:
LoadLibray 载入DLL
GetProcAddress  获取函数地址
使用函数句柄
FreeLibrary 释放DLL资源

3、查看DLL中经过修饰的函数名
http://msdn.microsoft.com/zh-cn/library/756as972.aspx
C++中会对函数名进行修饰,如果用显式链接,直接使用原始函数名会出现问题!
可以通过dumpbin工具进行查看:
方法为,从开始菜单中打开VS的command prompt,在命令行环境下输入以下命令,就可以看到导出的函数名了:
dumpbin /exports ./x64/Release/LBFGS_alglibDLLX64.dll

由于我使用隐式调用,这里不再深究
  • 大小: 38.4 KB
  • 大小: 59.5 KB
分享到:
评论

相关推荐

    dll创建和使用

    创建DLL: 1. **创建新项目**:在VS2012中,选择“文件”>“新建”>“项目”,然后在模板列表中选择“Win32控制台应用程序”。在向导中,选择“动态链接库(DLL)”作为项目类型。 2. **定义接口**:DLL中的函数通常...

    如何用vc6创建和使用dll

    首先,我们创建DLL项目。打开VC6,选择"File" -> "New",然后在"Project"对话框中,选择"Win32 Project"。在"Application Settings"中,确保"Dynamic-link library (DLL)"被选中,然后点击"Finish"。这样就创建了一...

    易语言创建进程注入DLL

    在易语言中,创建进程注入DLL是一项常见的技术操作,它主要用于实现程序间的数据共享、功能扩展或者隐蔽执行某些任务。这里我们将深入探讨这个主题。 首先,让我们了解什么是“创建进程”和“DLL注入”。创建进程是...

    dll的创建与使用 dll的创建与使用 dll的创建与使用

    创建DLL主要有两种方法:非MFC(Microsoft Foundation Classes)DLL和使用.def文件。 1. **非MFC DLL创建步骤**: - 打开Visual Studio,选择`File` -> `New` -> `Project`,然后选择`Win32 Dynamic-Link Library`...

    MFC dll的创建与使用

    本文将深入探讨如何创建和使用MFC DLL。 首先,我们来理解DLL(Dynamic Link Library)的基本概念。DLL是一种可执行文件,其中包含可由多个程序共享的函数和资源。通过使用DLL,开发者可以减少内存占用,提高系统...

    C#中创建及调用DLL

    本篇文章将深入探讨如何在C#中创建DLL以及如何在其他应用程序中调用这些DLL。 首先,我们来了解如何创建一个C# DLL。创建DLL的过程主要包括以下几个步骤: 1. **创建新项目**:在Visual Studio中,选择"文件" -> ...

    CreateShortcut使用DLL创建快捷方式

    本篇将详细介绍如何使用DLL创建快捷方式。 DLL(Dynamic Link Library)是Windows系统中的一种共享代码库机制,它允许多个程序同时使用同一段代码,从而节省内存并提高程序运行效率。在创建快捷方式的场景下,我们...

    VC创建与使用DLL

    一 链接库概述 二 静态链接库 三 库的调试与查看 四 一个简单的DLL 非MFC动态库 五 MFC规则DLL Regular 六 MFC扩展DLL的创建 七 让EXE导出函数及DLL木马

    易语言创建进程注入DLL文件

    易语言创建进程注入DLL文件。@qq1347522182。

    创建和使用 C# DLL(C# 编程指南)

    ### 创建和使用C# DLL(动态链接库)深入解析 #### 概述 在软件开发领域,动态链接库(Dynamic Link Library,简称DLL)是一种在Windows操作系统中广泛使用的共享库形式,它允许多个应用程序共享相同的代码和数据...

    VS创建DLL工程及使用方法

    VS 创建 DLL 工程及使用方法 在 VS 中创建 DLL 工程是一个常见的开发需求,以下是一个基本的示例,展示如何创建一个 Win32 DLL 动态链接库,并使用该库。 DLL 工程创建 首先,需要在 VS 中创建一个新的 Win32 DLL...

    DelphiDll创建与调用

    本篇文章将深入探讨如何在Delphi环境中创建DLL,并在其他程序中调用其函数。 首先,我们需要了解DLL的基本概念。DLL是一种可执行文件格式,它包含可由多个程序同时使用的代码和数据。Windows操作系统广泛支持DLL,...

    PB11.5创建DLL和调用示例_pb11添加新dll_PB11.5创建DLL和调用示例_

    创建DLL的步骤通常包括以下几个关键环节: 1. **设计接口**:首先,你需要定义DLL的接口,这包括确定对外公开的函数或类。这些函数将作为其他程序调用DLL的入口点。在PB11.5中,你可以通过创建一个新的函数或类并将...

    纯资源DLL创建与使用

    对于`.docx`文档,可能是详细说明创建和使用纯资源DLL的步骤,以及可能遇到的问题和解决方法。`res.rar`文件可能包含示例资源文件,如图标或对话框定义,供开发者参考和使用。 总的来说,纯资源DLL在Windows程序...

    如何用VC++创建及调用DLL

    创建DLL有几种不同的类型,包括Non-MFC DLL、Regular DLL和Extension DLL: 1. **Non-MFC DLL**:不使用MFC(Microsoft Foundation Classes)库,使用标准C语言或C++编写的DLL,导出的函数接口为标准C接口,可以被...

    Delphi创建Dll和调用Dll示例(包含Dll窗体调用)

    Delphi创建Dll和调用Dll示例(包含Dll窗体调用) 网上介绍比较杂乱,特地整理了一份Demo代大家学习参考。 1.socketA_dll 为dll工程目录。 2.LoadDllDemo 为【静态调用】dll工程目录。 3.LoadDllDemo_动态调用 为...

    dll创建及应用

    创建Dll a。首先新建一个 MFC AppWiZard(dll)文件。 b。在头文件中添加预定义。 如:#define NAN_IMAGE_DLL_EXPORT extern "C" __declspec(dllimport) c.在头文件中定义函数名称 函数名称:NAN_DrawLine 参数:...

    如何正确使用和创建DLL

    创建DLL的第一步是建立一个新的控制台应用项目,并将其配置为DLL类型。在Visual Studio中,选择"新建项目",然后在模板列表中选择"C++ Win32 Console Application",在后续的向导中选择"动态链接库(DLL)"并确认设置...

    vs2008创建DLL

    总结起来,VS2008创建DLL涉及项目配置、函数导出、头文件声明、编译及使用等多个环节。通过实践和理解这个例子,开发者不仅可以学会如何创建DLL,还能更好地理解DLL的工作原理和在实际项目中的应用。

    mfc创建DLL

    在这个“mfc创建DLL”的主题中,我们将深入探讨如何使用MFC构建这两种类型的DLL,以及如何在其他项目中使用这些DLL。 首先,让我们了解创建常规MFC DLL的步骤。常规MFC DLL 是一个与MFC静态链接的库,这意味着它...

Global site tag (gtag.js) - Google Analytics