无法创建简单的DLL示例

时间:2018-08-20 01:59:15

标签: c++ visual-studio-2017

我跟随microsoft documentation并偶然发现DLL项目应像这样编译:

1>------ Build started: Project: MathLibrary, Configuration: Debug Win32 ------  
1>  stdafx.cpp  
1>  dllmain.cpp  
1>  MathLibrary.cpp  
1>     Creating library c:\users\username\documents\visual studio 2015\Projects\MathLibraryAndClient\Debug\MathLibrary.lib and object c:\users\username\documents\visual studio 2015\Projects\MathLibraryAndClient\Debug\MathLibrary.exp  
1>  MathLibrary.vcxproj -> c:\users\username\documents\visual studio 2015\Projects\MathLibraryAndClient\Debug\MathLibrary.dll  
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========  

但是我成功编译了DLL项目,但是输出却少了。结果导致我的主应用程序无法编译,因为如编译器所说的那样,“您的DLL中没有.lib文件。”

DLL项目的输出如下:

1>------ Rebuild All started: Project: testDLL, Configuration: Debug Win32 ------
1>stdafx.cpp
1>dllmain.cpp
1>someClass.cpp
1>testDLL.cpp
1>Generating Code...
1>testDLL.vcxproj -> D:\stud\VStest\testDLL\Debug\testDLL.dll
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

我的输出显然缺少“创建库”部分。我不明白怎么了,我的VS是2017。

P.S。 MS在CPP文件中的注释是什么意思?

// Compile by using: cl /EHsc /DMATHLIBRARY_EXPORTS /LD MathLibrary.cpp 

1 个答案:

答案 0 :(得分:2)

在您的DLL项目中转到

项目设置-> C / C ++->预处理器->预处理器定义

并添加

MATHLIBRARY_EXPORTS 定义

所以MATHLIBRARY_API

#ifdef MATHLIBRARY_EXPORTS  
#define MATHLIBRARY_API __declspec(dllexport)   
#else  
#define MATHLIBRARY_API __declspec(dllimport)   
#endif  

将被解析为__declspec(dllexport)。这将指示编译器/链接器将标有该属性的函数导出到DLL导出部分以及导入库中(如果您将项目设置为create import library)。

此外,您可以按照以下方式实现您的类:

namespace MathLibrary  
{  
    // This class is exported from the MathLibrary.dll  
    class MATHLIBRARY_API Functions  
    {  
    public:  
        // Returns a + b  
        static double Add(double a, double b);  

        // Returns a * b  
        static double Multiply(double a, double b);  

        // Returns a + (a * b)  
        static double AddMultiply(double a, double b);  
    };  
}  

或者,您可以使用def files代替__declspec