VC6.0(VC++6.0)生成dll的两种方式(图文教程)2021最新

第一种方式、通过“extern "C"_declspec(dllexport)”方式导出

1、菜单项“文件”——>“新建”——>“工程”——>“Win32 Dynamic-Link Library”。创建一个工程项目,为这个工程取个名字为“test”。在这里我选择“创建一个简单的DLL”,此时在VC++界面上会有一个树形文件结构。

VC6.0(VC++6.0)生成dll的两种方式(图文教程)2021最新_第1张图片

2、看到这个文件结构就大概明白,Source Files是放源码的,也就是以.cpp为后缀的文件;Header Files就是以放头文件,也就是以.h为后缀的文件。这个StdAfx.h和StdAfx.cpp都是自动生成的,这个StdAfx.h是一些默认的配置,这个不需要我们去动它。反正有了这个文件,我们只要在我们的源文件(如test.cpp)中引入这个头文件就行了。test.cpp的默认文件如下:

#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}

3、假设现在我要实现一个a+b的功能,并将这个功能打包成一个动态链接库(DLL),供其他的程序调用。代码如下:

#include "stdafx.h"
extern "C"_declspec(dllexport) int fun(int a,int b);
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}

int fun(int a,int b) {
    return a+b;
}

extern "C"_declspec(dllexport) int fun(int a,int b)就是将这个方法导出,也就是把这个接口提供给其他程序。当然,如果还要定义其他的方法,都要用这个语句把这个接口暴露出来。

4、此时,我们“build”工程,也就是组建一下。如果成功的话,就能在工程目录下的Debug目录下找到一个“test.dll”的文件。

第二种方式、通过“def文件”方式导出

1、重新建立一个“Win32 Dynamic-Link Library”工程,见方式一的1、2两步;

2、假设现在我要实现一个a+b的功能,并将这个功能打包成一个动态链接库(DLL),供其他的程序调用。test.cpp中代码如下:

#include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}

int fun(int a,int b) {
    return a+b;
}

3、工程Source Files文件右键——>“添加文件到文件夹”——>文件名“test.def”——>确定,文件内容如下:

LIBRARY	Test
EXPORTS
	fun	@1

        LIBRARY 语句的后面是 DLL 的名称。链接器将此名称放到 DLL 的导入库中。 

        EXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。通过在函数名的后面加上 @ 符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从 1 到 N,其中 N 是 DLL 导出函数的个数。

4、此时,我们“build”工程,也就是组建一下。如果成功的话,就能在工程目录下的Debug目录下找到一个“test.dll”的文件。

注意:若想在def文件中修改dll名称,则需下面配置一致。

        菜单项“Project”——>“Settings”——>“Link”——>“Output file name” 。

你可能感兴趣的:(C/C++,c++,dll)