错误 C2491:不允许定义 dllimport 函数



我在Visual Studio 2013上制作dll时遇到问题。此代码适用于 Code::Blocks。错误definition of dllimport function not allowed" on line void DLL_EXPORT prim(map<string, vector<int>> nodes, map<pair<string, string>, pair<int, string>> edges) 。如何解决?

main.h:
#ifndef __MAIN_H__
#define __MAIN_H__
#include <windows.h>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C"
{
#endif
void DLL_EXPORT prim( map<string,vector<int>> nodes, map<pair<string,string>,pair<int,string>> edges);
#ifdef __cplusplus
}
#endif
#endif // __MAIN_H__

第二个文件:

main.cpp:
#include "main.h"
//some other includes
// a sample exported function
extern "C"
{
    void DLL_EXPORT prim(map<string, vector<int>> nodes, map<pair<string, string>, pair<int, string>> edges)
    {
        //some code
    }
}

我试图修复它,但我没有更多的想法。当我将第二个文件中的 prim 函数从定义更改为声明时,dll 编译时没有错误,但没有负责算法实现的代码。

感谢所有回复。

编辑:

我将临时 #define BUILD_DLL 添加到main.h,后来在Cmake中添加,我工作。感谢您的回复。

>main.hmain.cpp将在您正在创建的DLL项目中使用。

只有main.h将在访问您创建的 DLL 的客户端可执行文件/DLL 中使用。

因此,DLL项目的main.h需要__declspec(dllexport)。以便可以从 DLL 导出函数。因此,在DLL Project's Properties -> C/C++ -> 'Preprocessor definitions'中定义BUILD_DLL

客户端可执行文件的main.h需要__declspec(dllimport) 。以便可以从 DLL 导入函数。因此,无需Executable Project's Properties -> C/C++ -> 'Preprocessor definitions'<

div class="one_answers"中定义BUILD_DLL>您应该

只定义BUILD_DLL是某些标头或在项目属性 -> C/C++ ->"预处理器定义"中定义。因此,DLL_EXPORT将被__declspec(dllexport),这就是您在构建 dll 时想要的。 如果要从其他DLL导入函数,则需要__declspec(dllimport)。此错误意味着您无法重新定义导入的函数,因为它是在从中导入它的 dll 中定义的。

我认为您只需要删除main.cpp中的DLL_EXPORT。该错误表示定义中不允许这样做。因为它有一个身体{...},所以它是一个定义。

相关内容

  • 没有找到相关文章

最新更新