2014-12-22 3 views
4

질문이 있습니다. 프로젝트가 동일한 솔루션 하에서 서로를 참조 할 수 있습니까?Microsoft Visual Studio 2012 C++ 순환 참조

예를 들어 A 프로젝트와 B 프로젝트 모두 자체 내보내기 기능을 가지고 있습니다. 프로젝트 A 참조 프로젝트 B 및 프로젝트 B 참조 프로젝트 A. 두 프로젝트는 서로 내 보낸 함수에 액세스해야했습니다.

기술적으로 가능합니까?

+0

코드 또는 솔루션의 의미입니까? 프로젝트 의존성? 후자가 아니면 후자의 방법을 통해 프로젝트 종속성을 도입 할 수 없다는 것을 알 수 있습니다. 프로젝트 메뉴에서 – EdChum

+0

VisualStudio에서는 아니지만 가져 오기 수준에서 할 수 있습니다. 다소 어렵고 대개는 가치있는 것보다 훨씬 더 많은 노력이 있습니다. 예를 들어 실제로로드 할 때 DLL이 링크 할 수있는 EXE에서 함수를 내보낼 수 있습니다. 이렇게하면 많은 설정과 수동 초기화없이 EXE 내의 기능에 대한 DLL의 즉각적인 액세스가 가능해집니다. .DEF 파일을 만들고 가져 오기 라이브러리 (LIB)를 생성하십시오. 그것이 당신이 찾고있는 것이라면 확실하지 않습니다. –

+0

방금 ​​시도한이 프로젝트는 종속 프로젝트가 회색으로 표시됩니다. 팝업 대화 상자가 나타나면 '이 종속성을 순환 종속성을 만들 수 없으므로 추가 할 수 없습니다.'라고 알립니다. – EdChum

답변

1

기술적으로는 가능하지만 문제가 있습니다. 만 B를 먼저 프로젝트 A는 B에 의존하지 않는다 : 당신은이 DLL을 빌드 할 때 DLL A가 B의 lib 디렉토리 파일이 필요합니다

는, B는

바로 여기에 우리가 어떻게 A의 lib 디렉토리 파일이 필요합니다 A는 DLL에 A를 빌드 할 수있는 동안 funcA1과 funcA2의 두 함수를 내 보낸다. 그러면 B를 빌드하고 B.lib를 생성 할 수있다. B.lib 파일을 가지고 있기 때문에 A가 B에 의존하도록하고 B에서 내 보낸 함수를 사용하는 코드를 추가 할 수 있습니다. 이것은 실제 실제 프로젝트에서 순환 참조를 생성 한 방법입니다.

문제는 : 모든 lib 파일을 정리하고 다시 빌드하면 할 수 없다는 것입니다. 저는 순환 참조를 만드는 대신에 관련 함수를 다른 DLL에 넣어야합니다.

+0

실제로 한 가지 방법은 사용자 지정 빌드 명령을 사용하여 DEF 파일에서 가져 오기 라이브러리를 만드는 세 번째 프로젝트 (프로젝트 C)를 만드는 것입니다. 그런 다음 프로젝트 A와 프로젝트 B를 프로젝트 C에 종속되게 만듭니다. 그러면 가져 오기 라이브러리는 이전에 올바른 시간에 빌드됩니다. –

+0

@Matt : 설명 주셔서 감사합니다. 나는 재건축을 할 때 순환 참조 문제를 예견한다. 그들은 이것을 허용하지 않을 것입니다. 프로젝트 A와 B가 C를 참조하여 다른 DLL (프로젝트 C)에 관련 함수를 넣으라고 제안합니다. – Wallace

1

내 이해를 위해 이것은 불가능합니다. 두 프로젝트 A와 B가 서로 참조한다면, 그들은 같은 프로젝트 일 것입니다. 어떤 프로젝트가이 구조를 필요로 할 것인지 명확하지 않습니다.