DLL中的函数标记错误dllimport

时间:2015-12-30 07:26:58

标签: c++ windows codeblocks

我创建了一个名为Test Lib的DLL项目:

// main.h
#ifndef __MAIN_H__
#define __MAIN_H__

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif

extern "C" {
    DLL_EXPORT void print();
}
#endif

// main.cpp
#include "main.h"
#include <iostream>

#define BUILD_DLL

using std::cout;
using std::endl;

extern "C" {
    DLL_EXPORT void print() {
        cout << "Success" << endl;

        return;
    }
}

以上代码来自我在网上发现的一个我能理解的例子。当我尝试编译和/或构建它时,我得到以下错误&amp;警告:

error: function 'void print()' definition is marked dllimport
In function 'void print()':
warning: 'void print()' redeclared without dllimport attribute: previous dllimport ignored

这是我创建的第二个库,因为我试图在第一个库中复制一个问题,当发生这种情况时。怎么了?我正在使用Code :: Blocks。

1 个答案:

答案 0 :(得分:3)

在包含头文件BUILD_DLL之前,您需要定义main.h

#define BUILD_DLL
#include "main.h"

在程序中,您使用print声明__declspec(dllimport),因为未定义BUILD_DLL时会处理头文件。