2013-03-29 3 views
4

주 메모리 기반 R- 트리를 코딩 했는데도 디스크 기반 R- 트리의 초보자입니다. 디스크 기반의 R-Trees를 이해하기 위해 "libspatialIndex"라이브러리를 사용하고 있습니다. 라이브러리를 이해하는 동안 나는 아래의 같은 클래스의 이상한 정의를 통해 오는 오전 :C++의 클래스 정의를 이해할 수 없습니다.

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을 나타내는 포인터를 주시겠습니까?

답변

1

에 정의되어 있음을 볼 수 있습니다. 동적 연결을 구현하는 데 필요한 속성을 추가하십시오.

+0

도움을 주셔서 감사합니다. 어떤 함수가 어디에 정의되어 있는지 이해하기 위해 IDE를 사용 했습니까? 지금까지 텍스트 편집기에서 파일을보고 나서 grep 명령으로 파일의 정의를 검색하고 있습니다. 함수/클래스 정의를 빨리 얻을 수있는 쉬운 방법이 있습니까? 제발 도와주세요 – user1778824

+0

QtCreator를 사용합니다. 여기서 F2는 심볼 정의로 점프합니다. – CapelliC

+0

어떻게 QTCreator에서 프로젝트 libsptialindex를 열었습니까? 나는 Qtcreator에 새로운입니다. 그래서 .. 도와주세요.또한 QTCreator 프로젝트 libspatialindex를 컴파일 할 수도 있습니다. – user1778824

1

Tools.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 

+0

도움을 주셔서 감사합니다. 어떤 함수가 어디에 정의되어 있는지 이해하기 위해 IDE를 사용 했습니까? 지금까지 텍스트 편집기에서 파일을보고 나서 grep 명령으로 파일의 정의를 검색하고 있습니다. 함수/클래스 정의를 빨리 얻을 수있는 쉬운 방법이 있습니까? 제발 도와주세요 – user1778824

+0

@ user1778824 아니, 그냥 정의를보고 SIDX_DLL 봤는데 =) – kassak

0

그것은 매크로입니다. dll 가져 오기/내보내기 속성을 정의합니다.

은 정의 (F12)로 이동, 당신은이 라이브러리 클라이언트와 라이브러리 구현에서 사용할 수 등이 동일을 할 수있는 매크로의 __declspec(import)__declspec(export)

+0

도와 줘서 고마워. 어떤 함수가 어디에 정의되어 있는지 이해하기 위해 IDE를 사용 했습니까? 지금까지 텍스트 편집기에서 파일을보고 나서 grep 명령으로 파일의 정의를 검색하고 있습니다. 함수/클래스 정의를 빨리 얻을 수있는 쉬운 방법이 있습니까? 도와주세요 – user1778824

+0

@ user1778824 클래스 이름 다음의 매크로는 __declspec 용입니다 ... Visual Studio를 IDE로 사용하고 모든 파일을 프로젝트에로드하면됩니다. –

+0

이렇게 할 수있는 방법은 netbeans에서 동일합니다 – user1778824

1

SIDX_DLL은 매크로입니다. DLL에서 IStorageManager 심볼을 내보내는 것입니다.

은 매크로의이 종류는 일반적으로 다음과 같이 정의된다 :

#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가 SIDX DLL을 컴파일하는 경우에만 정의 가져옵니다 MSVC 정의 상징이다. 이 경우 SIDX_DLL__declspec(dllexport)으로 확장됩니다. 다른 모든 경우에는 __declspec(dllimport)으로 확장됩니다.이 기호는 기호가 사용되는 곳으로 가져옵니다.

비어있는 SIDX_DLL (목록의 마지막 #else)은 비 Windows 환경을위한 것입니다.

+0

dll의 클래스 정의 – user1778824

+0

그것은 MSVC가 작동하는 방식입니다. 수출하지 않고 심볼 자체의 dll 외부에서 사용하려고하면 연결 오류가 발생합니다. – shakurov

+0

MSVC는 Microsoft Visual C++을 의미합니까 – user1778824

관련 문제