我这边需要做成dll的算法代码比较多,而且分成很多个文件,我自己做了一个接口MakeCVNNAPI.cpp,在里面我声明了需要外部调用的函数MakeCVNN()以及算法计算后产生的传出结果vector<RLU> RL。然后在我win32的dll工程MakeCVNN中添加头文件MakeCVNN.h我另外做了CVNNDeclar.h文件,将接口函数MakeCVNN()以及传回的vector<RLU> RL进行了预声明:#pragma once
#include <vector>
using namespace std;typedef struct  
{
 double x;
 double y;
}CVP;
typedef struct  
{
 CVP start;
 CVP end;
}CVS;
typedef struct
{
 CVP CVNN;
 CVS segment;
}RLU;extern vector<RLU> RL;
void MakeCVNN(char * data, char * obstacle, char * qs);然后,我的MakeCVNN.h文件如下:#include "stdafx.h"
#include "CVNNDeclar.h"
#define DLLEXPORT __declspec(dllexport)
#define DLLIMPORT __declspec(dllimport)DLLIMPORT vector<RLU> RL;
extern "C" DLLEXPORT void MakeCVNN(char * data, char * obstacle, char * qs);问题:
编译错误:RL 重定义(就是我传回的结果,此结果在之前的MakeCVNNAPI.cpp中也被定义了一次vector<RLU> RL;)我这里就不太清楚是我哪次的声明或者定义产生了这个错误。
虽然MakeCVNNAPI.cpp文件中定义过一次vector<RLU> RL ,但是在CVNNDeclar.h进行的只是预声明extern,那么就是我在MakeCVNN.h中的DLLIMPORT vector<RLU> RL;出问题了。但是,不是必须将传回的结果RL以DLLIMPORT的方式声明在 MakeCVNN.h文件中吗?

解决方案 »

  1.   


    #include "stdafx.h"
    #include "CVNNDeclar.h"
    #define DLLEXPORT __declspec(dllexport)
    #define DLLIMPORT __declspec(dllimport)DLLIMPORT vector<RLU> RL;//这里会出现重定义,因为这是在头文件里,你应该使用extern(可以用于导入)
    extern "C" DLLEXPORT void MakeCVNN(char * data, char * obstacle, char * qs);
      

  2.   

    我其实试过,加了extern还是同样问题