创建 DLL 文件是否必须编写头文件?

3

我是一个创建dll文件的初学者。我已经到处搜寻,但找到的帮助很少,可能是因为这是基础知识吗?我想知道是否在创建dll文件时总是需要编写头文件?根据网上的一些帮助,我已经编写了.cpp文件。我已经构建了它,一切正常,但目录中没有.lib文件,所以我想知道是否是因为我没有为dll创建头文件?如果是的话,你能帮我为我的代码编写一个吗?这是我的.cpp代码。它是一个简单的球体表面积和体积计算代码。

// myfirstdll.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "math.h"    //library that defines the pow function
#define M_PI 3.14159 //declare our M_PI constant

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


//Function declarations
extern "C" __declspec(dllexport) int __cdecl GetSphereSAandVol(double radius, double*     sa, double* vol);
double GetSA(double radius);
double GetVol(double radius);



__declspec(dllexport) int __cdecl GetSphereSAandVol(double radius, double* sa, double* vol)
//Calculate the surface area and volume of a sphere with given radius
{
    if(radius < 0)
    return false; //return false (0) if radius is negative
        *sa = GetSA(radius);
        *vol = GetVol(radius);
        return true;
}

double GetSA(double radius)
{
    return 4 * M_PI * radius * radius;
}

double GetVol(double radius)
{
    return 4.0/3.0 * M_PI * pow(radius, 3.0);
}
4个回答

5
一个DLL的头文件只是用于声明导出函数,与编译器生成.lib文件无关。你可以直接在DLL的.cpp文件中声明函数,编译器不会有任何问题。因此,在这方面,头文件并不是必需的。
然而,如果您计划在其他C/C++项目中静态使用该DLL,则头文件很有用,因为函数已经被声明,因此在调用项目中不必手动声明。

5
常见的做法是将头文件和.lib文件与.dll文件一起生成。
然后,在您的项目中,您将使用您的.dll创建项目的.h文件以及.lib文件,以便将您的.dll静态链接到其他应用程序/ dll。
因此,最佳实践是将.h和.lib与.dll一起使用,但这不是强制性的。

你不需要使用.h文件与.lib和.dll文件进行链接。 - Camron_Godbout
1
不,你不需要这样做。我只是说这是最佳实践。 - MichaelCMS

0

不,你不需要一个头文件来编译一个.dll文件。


1
没有头文件和导入库的情况下,使用动态链接库通常会更加繁琐和困难。 - drescherjm
这取决于你想用它来做什么。我用C++编写了一个DLL来与一些旧的FORTRAN代码配合使用,而且我不需要头文件。 - Camron_Godbout

0
你需要的是“导出函数的原型(返回方法、参数、调用约定等)”,这对编译器生成对这些函数的调用以及如何传递参数等是必要的。
通常,为了更好的实践,这会在一个`.h`或者`.hpp`文件中完成(库的作者将头文件与库的`.lib`或`.dll`文件一起分发,这样每个人都很开心),但不强制要求这样做。
只要你让编译器知道“导出函数的原型”(例如:你可以在项目中明确指定,例如:在某个`.cpp`文件中),编译器会正确地生成代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接