2009-10-14 4 views
1

은 내가dll 프로젝트간에 extern 메서드를 사용합니까?

 extern void* operator new(unsigned int size, const char* file, int line); 
    extern void operator delete(void* address, const char* file, int line); 
    extern void Delete(void* address); 
    #define FUN_NEW new(__FILE__, __LINE__) 
    #define FUN_DELETE delete 

Memory.h에 존재하고 Memory.cpp에서 구현 된 메모리를 관리 할 수있는 디버그 조건을 가지고있다. Memory.h과 같이 정의된다 : 이제

#ifdef MEMORY_EXPORT 
#define DECL_MEMORY __declspec(dllexport) 
#else 
#define DECL_MEMORY __declspec(dllimport) 
#endif 
class DECL_MEMORY Memory : public Singleton<Memory> 
{ 

, I SoundStuff.h과 별도의 프로젝트에 SoundStuff.cpp는, 또한 위의 유사한 방식으로 DLL로 변환되고있다. SoundStuff가 속한 프로젝트는 Memory이 속한 프로젝트에 프로젝트 종속성을가집니다. SoundStuff.cpp 구현시 의 Memory.h에서 FUN_DELETE이 호출됩니다. 그것은 별도의 프로젝트에서 함수를 통해 호출되지만 관계없이 호출됩니다. 이로 인해 링커 오류가 발생합니다.

오류 LNK2019 :되지 않은 외부 심볼 기능 __unwindfunclet $ 초기화 @에서 참조 (?? 3 @ YAXPAXPBDH @ Z) "무효 __cdecl 연산자 (무효 * 숯 CONST의 * int)를 삭제 " SoundStuff @@ AAEXXZ $ (1) SoundStuff.obj

어떻게 그것을 왜 문제를 해결할 수이되고?

+0

CoreFunctions를 DoSomeStuff에 연결하는 방법을 보여주십시오. –

+0

설명에 추가되었습니다. 거기에 프로젝트 의존성이 있고 DoSomeStuff 클래스의 Init 함수는 CoreFunctions에 정의 된 FUN_DELETE를 호출합니다. – Mark

+0

고마워요. 하나의 다른 비트; 당신은 이렇게 말합니다 : "그것은 별도의 프로젝트에서 기능을 통해 호출됩니다."-이 경우 어떤 의미인지를 명확히 할 수 있습니까? 'SoundStuff.cpp'가 다른 프로젝트에서 함수를 호출하고, 다시'FUN_NEW'를 호출한다는 것을 의미합니까? 그렇다면, 그 다른 프로젝트의 코드도'#include "Memory.h"'를 수행합니까? –

답변

1

컴파일러에게 내보낼 함수를 명시 적으로 알려야합니다. 이 작업을 수행 할 수있는 작은 노래와 댄스가있어, 여기에 내가 그것을 할 방법은 다음과 같습니다 나는 내보낼 것

#ifdef USING_DLL 
#ifdef CORE_EXPORTS 
#define CORE_EXPORT __declspec(dllexport) 
#else 
#define CORE_EXPORT __declspec(dllimport) 
#endif 
#else 
#define CORE_EXPORT 
#endif 

각 함수 (또는 클래스) CORE_EXPORT 태그됩니다. DLL을 빌드하려면 USING_DLL을 정의하고 CoreFunctions 프로젝트 (DoSomeStuff 프로젝트는 제외)에서 CORE_EXPORTS을 정의하십시오. 그러면 CoreFunctions DLL이 빌드 될 때 __declspec(dllexport)이 빌드 될 것이므로 (내보내지기 때문에) 함수/클래스가 선언되고 DoSomeStuff이 빌드 될 때 __declspec(dllimport)이 선언되므로 가져 오기됩니다.

+0

이것은 사실입니다. 지정하지 않으면 죄송합니다. 나는 이것을 끝내었다. 나는이 매크로를 가지고 모든 클래스에 절대적으로 레이블을 붙였다. – Mark

+0

함수 프로토 타입은 실제로 어떻게 생겼는가? – Sol

+0

아니면 함수가 클래스 선언의 일부입니까? – Sol

관련 문제