Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误C2491:不允许定义dllimport函数_C++_Dllimport_Dllexport_Msvc12 - Fatal编程技术网

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

C++ 错误C2491:不允许定义dllimport函数,c++,dllimport,dllexport,msvc12,C++,Dllimport,Dllexport,Msvc12,我在Visual Studio 2013上创建dll时遇到问题。此代码适用于代码::块。错误是“不允许定义dllimport函数”联机无效DLL\u导出prim(映射节点、映射边)。如何修复它 main.h: #ifndef __MAIN_H__ #define __MAIN_H__ #include <windows.h> #include <iostream> #include <vector> #include <map> using n

我在Visual Studio 2013上创建dll时遇到问题。此代码适用于代码::块。错误是“
不允许定义dllimport函数”联机无效DLL\u导出prim(映射节点、映射边)
。如何修复它

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.h:
#ifndef\uuuu MAIN\uh__
#定义主__
#包括
#包括
#包括
#包括
使用名称空间std;
#ifdef BUILD_DLL
#定义DLL\u导出\u declspec(dllexport)
#否则
#定义DLL\u导出\u declspec(dllimport)
#恩迪夫
#ifdef_uucplusplus
外部“C”
{
#恩迪夫
void DLL_EXPORT prim(贴图节点、贴图边);
#ifdef_uucplusplus
}
#恩迪夫
#endif/\uuu MAIN\u 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
    }
}
main.cpp:
#包括“main.h”
//其他一些包括
//示例导出函数
外部“C”
{
void DLL_导出原语(贴图节点、贴图边)
{
//一些代码
}
}
我试图修复它,但我没有更多的想法。当我将第二个文件中的prim函数从定义更改为声明时,dll编译时没有错误,但没有负责算法实现的代码

谢谢你的回复

编辑:


我将临时的#define BUILD_DLL添加到main.h和更高版本的Cmake中,我可以工作了。谢谢您的回复。

您应该只定义
BUILD_DLL
是您的一些标题或在项目属性->C/C++->“预处理器定义”中。
因此,
DLL\u导出
将是
\u declspec(dllexport)
,这就是您在构建DLL时所需要的。
\u declspec(dllimport)如果要从其他dll导入函数,则需要使用
。此错误意味着您无法重新定义导入的函数,因为它是在从中导入函数的dll中定义的。

main.h
main.cpp
将在您正在创建的dll项目中使用

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

因此,DLL项目的
main.h
需要
\u declspec(dllexport)
,以便可以从DLL中导出函数。因此,在
DLL项目的属性->C/C++->“预处理器定义”中定义BUILD\u DLL


客户端可执行文件的
main.h
需要
\u declspec(dllimport)
。这样就可以从DLL导入函数了。所以无需在
可执行项目的属性->C/C++->“预处理器定义”中定义构建DLL

我想你只需要删除main.cpp中的
DLL\u EXPORT
。错误表明在定义中是不允许的。因为在那里有一个主体
{…}
,它是一个定义