错误:函数定义标记为dllimport

时间:2013-12-17 20:35:50

标签: c++ qt dllimport

我正在尝试使用AVT的VIMBA SDK运行玩具程序。目前,除了一个警告之外,它仍然很顺利。当我尝试编译时,我得到一系列错误(其中14个)都标记为同一个错误:

function *insert call here* definition is marked dllimport

文件本身低于 - 奇怪的是,在这个文件中,只有~IFeatureObserver(),IFeatureObserver()和IFeatureObserver(const IFeatureObserver&)触发错误; FeatureChanged()在编译期间不会出错。

#ifndef AVT_VMBAPI_IFEATUREOBSERVER_H
#define AVT_VMBAPI_IFEATUREOBSERVER_H

#include <VimbaCPP/Include/VimbaCPPCommon.h>
#include <VimbaCPP/Include/SharedPointerDefines.h>
#include <VimbaCPP/Include/Feature.h>
#include <vector>

namespace AVT {
namespace VmbAPI {

class IFeatureObserver 
{
  public:

    IMEXPORT virtual void FeatureChanged( const FeaturePtr &pFeature ) = 0;

    IMEXPORT virtual ~IFeatureObserver() {}

  protected:
    IMEXPORT IFeatureObserver() {}
    IMEXPORT IFeatureObserver( const IFeatureObserver& ) { /* No copy ctor */ }
};
typedef std::vector<IFeatureObserverPtr> IFeatureObserverPtrVector;

}} // namespace AVT::VmbAPI

#endif

在追踪IMEXPORT的来源后,我在.h文件中找到了它。

#if defined (_WIN32)
    #if defined AVT_VMBAPI_CPP_EXPORTS          // DLL exports
        #define IMEXPORT __declspec(dllexport)
    #elif defined AVT_VMBAPI_CPP_LIB            // static LIB
        #define IMEXPORT
    #else                                       // import
        #define IMEXPORT __declspec(dllimport)
    #endif
#elif defined (__GNUC__) && (__GNUC__ >= 4) && defined (__ELF__)
    #define IMEXPORT
#elif defined (__APPLE__)
    #define IMEXPORT
#else
    #error Unknown platform, file needs adaption
#endif

我目前正在使用Win7-32​​位机器在Qt上编程,据我所知,IMEXPORT被定义为__declspec(dllimport)。

思考?提前谢谢!

1 个答案:

答案 0 :(得分:2)

您应该在makefile或VS项目中定义宏AVT_VMBAPI_CPP_EXPORTS。这样,IMEXPORT被定义为此库的dllexport,并在其他库/ app使用它时导入dll。

顺便说一下,将这个属性添加到类本身,而不是每个函数都更清晰。

class IMEXPORT IFeatureObserver {
public:
    virtual void FeatureChanged( const FeaturePtr &pFeature ) = 0;
};