是否必须编写用于创建dll文件的头文件?

时间:2014-08-12 18:02:01

标签: c++ visual-studio-2010 visual-c++ dll header

我是创建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 个答案:

答案 0 :(得分:3)

DLL的头文件仅用于声明导出的函数,它与生成.lib文件的编译器无关。您当然可以直接在DLL的.cpp文件中声明函数,而编译器并不关心这种或那种方式。因此,在这方面,不需要头文件。

但是,如果您计划在其他C / C ++项目中静态使用DLL,则头文件很有用,因为函数已经被声明,因此不必在调用项目中手动声明。

答案 1 :(得分:3)

通常的做法是将头文件和.lib文件与.dll文件一起生成。

然后,在您的项目中,您将使用.dll创建项目的.h文件和.lib文件,以便将.dll静态链接到其他应用程序/ dll。

因此,最佳做法是将.h和.lib与.dll一起使用,但这不是强制性的。

答案 2 :(得分:0)

不,您不需要头文件来编译.dll

答案 3 :(得分:0)

你需要的是prototype of the exported functions (返回方法,参数,调用约定......等),这对于编译器生成对此函数的调用以及如何生成是必需的传递参数等等。

通常这是在.h.hpp文件中完成的,以便更好地练习(库的作者使用库.lib或.dll或两者分发标题,每个人都很高兴),但是这不是必需的。

只要你告诉你exported function prototype的编译器(例如:你可以在你想要使用的项目中明确写出,例如:在某些.cpp中),编译器就会做正确的工作生成代码。