c++ - 错误: function definition is marked dllimport

标签 c++ qt dllimport

我正在尝试使用 AVT 的 VIMBA SDK 运行一个玩具程序。目前,除了一个警告外,一切进展顺利。当我尝试编译时,出现一系列错误(其中 14 个),所有错误都标记为相同的内容:

函数*在此处插入调用*定义被标记为 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)。

想法?预先感谢!

最佳答案

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

顺便说一句,将此属性添加到类本身而不是每个函数中会更干净。

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

关于c++ - 错误: function definition is marked dllimport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644151/

相关文章:

Qt如何更改特定QComboBox项目的突出显示颜色

c++ - Qt->QGraphicsView->QGraphicsItem 调整大小

windows - 为什么加载 dll 不需要完整的文件路径?在什么情况下此功能会有用?

c++ - 将基类模板的 `this` 类型转换为其派生类

c++ - boost::asio 如何以正确的方式读取完整缓冲区?

c++ - 从 qrc 文件加载 .qss 主题

python - 导入 PyQt5 时 DLL 加载失败

c++ - CGAL::Delaunay_triangulation_3 期间无限循环

c++ - 使用 cURL/libcurl 上传到 Amazon S3

c# - 在 C# 中使用 C 函数