我正在尝试使用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)。
思考?提前谢谢!
答案 0 :(得分:2)
您应该在makefile或VS项目中定义宏AVT_VMBAPI_CPP_EXPORTS
。这样,IMEXPORT被定义为此库的dllexport,并在其他库/ app使用它时导入dll。
顺便说一下,将这个属性添加到类本身,而不是每个函数都更清晰。
class IMEXPORT IFeatureObserver {
public:
virtual void FeatureChanged( const FeaturePtr &pFeature ) = 0;
};