4

我是基于磁盘的 R-trees 的新手,尽管我已经编写了基于主内存的 R-Trees。为了理解基于磁盘的 R-Trees,我使用了库“libspatialIndex”。在了解该库时,我遇到了类的奇怪定义,如下所示:

class SIDX_DLL IStorageManager
{
public:
    virtual void loadByteArray(const id_type id, uint32_t& len, byte** data) = 0;
    virtual void storeByteArray(id_type& id, const uint32_t len, const byte* const data) = 0;
    virtual void deleteByteArray(const id_type id) = 0;
    virtual ~IStorageManager() {}
}; // IStorageManager

我无法理解这个新的类定义,它在类定义中使用 SIDX_DLL。有人可以给我指点一下 SIDX_DLL 在类定义中代表什么。

4

5 回答 5

1

工具.h

47 #if defined _WIN32 || defined _WIN64 || defined WIN32 || defined WIN64
48  #ifdef SPATIALINDEX_CREATE_DLL
49  #define SIDX_DLL __declspec(dllexport)
50  #else
51  #define SIDX_DLL __declspec(dllimport)
52  #endif
53 #else
54  #define SIDX_DLL
55 #endif

那只是一个宏,它将特定于编译器的属性添加到类定义中

于 2013-03-29T10:30:52.170 回答
1

它是一个宏,允许从库客户端和库实现中使用相同的包含。添加实现动态链接所需的属性。

于 2013-03-29T10:32:54.673 回答
1

SIDX_DLL是一个宏。它用于将IStorageManager符号导出到 dll 中。

这种宏通常定义如下:

 #if defined(_MSC_VER) && defined(SIDX_EXPORTS)
 #  define SIDX_DLL __declspec(dllexport)
 #elif defined(_MSC_VER)
 #  define SIDX_DLL __declspec(dllimport)
 #else
 #  define SIDX_DLL
 #endif

SIDX_EXPORTS是一个 MSVC 定义的符号,仅在编译 SIDX dll 时才被定义。在这种情况下,SIDX_DLL展开为__declspec(dllexport)。在所有其他情况下,它扩展为__declspec(dllimport)- 将符号导入到使用它的任何地方。

SIDX_DLL的(列表中的最后一个#else)用于非 Windows 环境。

于 2013-03-29T10:34:02.040 回答
0

是定义的。您可以在http://libspatialindex.github.com/doxygen/Tools_8h_source.html第 54 行阅读相关内容。

于 2013-03-29T10:30:37.790 回答
0

这是一个宏。它可能定义了 dll 导入/导出属性。

转到它的定义 (F12),你会看到它被定义__declspec(import)__declspec(export)

于 2013-03-29T10:32:29.777 回答