2009-07-09 2 views
1

저는 혼합 모드 DLL을 작성하려고합니다. 'Client'라고 부르 자. 관리되지 않는 클래스를 관리되는 클래스로 대체하려고합니다. 개인용 컴퓨터에서는 모든 것이 잘 작동하지만 소스 코드를 확인하면 빌드 시스템이 프로젝트를 빌드하지 않습니다. 그것은 '코어'라는 다른 DLL에서 사용하고있는 Managed 클래스를 인식하지 못합니다.C++/CLI 사전 컴파일 된 헤더 : 어떻게 작동합니까?

문제는 미리 컴파일 된 헤더와 관련이 있다고 생각합니다. 이유는 다음과 같습니다.

'Core'의 클래스를 사용하려면 'Client'프로젝트의 'Core'프로젝트에 대한 참조를 추가했습니다. 이 참조를 제거한 다음 개인용 컴퓨터에서 프로젝트를 빌드하면 여전히 작동합니다. CLR PCH는 참조를 제거한 후에 다시 컴파일하지 않습니다. CLR PCH를 다시 ​​컴파일 한 다음 프로젝트를 컴파일하면 빌드 컴퓨터에서와 동일한 오류가 발생하여 관리되는 클래스가 인식되지 않습니다.

DLL에서 가져온 관리 클래스는 미리 컴파일 된 헤더에 정의되어있는 것처럼 보입니다. 나는 이것을 검증 할 수 없었지만, 그것이 내가 가진 최선의 추측이다. 누구든지이 문제에 관해 통찰력을 가질 수 있습니까? 혼합 DLL의 프로젝트 참조가 관리되는 PCH에 후크를 넣음으로써 해결됩니까?

  1. 는 클라이언트 구축 가져 오기 :

    단계 다음은 나에게 아무 의미

    재현합니다.

  2. 참조를 클라이언트에서 핵심으로 제거하십시오. 클라이언트 컴파일. 클라이언트가 여전히 빌드됩니다. 이것은 예상되지 않습니다.
  3. 클라이언트 PCH를 다시 ​​컴파일하고 클라이언트를 컴파일하십시오. 클라이언트 컴파일 실패 : '코어'의 클래스가 정의되지 않았습니다. 이는 예상되는 동작입니다.
  4. 코어에 참조 추가, 컴파일. 같은 이유로 컴파일 클라이언트가 실패합니다. 예상하지 않습니다.
  5. 클라이언트 PCH를 다시 ​​컴파일 한 다음 클라이언트를 컴파일하십시오. 클라이언트가 잘 컴파일됩니다.

결론이 실험의 결론은 참조가 미리 컴파일 된 헤더를 통해 프로젝트에 삽입되고 적어도 빌드 시스템에서는이 작동 방식에 문제가 있다는 것입니다.

답변

0

C++/CLI에서 관리/혼합 모드 dll에 대한 참조를 추가하는 또 다른 방법은 #using Core.dll을 클라이언트에 추가하는 것입니다. 이렇게하면 빌드 문제가 해결 될 수 있습니다.

0

미리 컴파일 된 헤더를 사용할 필요가 없기 때문에 그렇게 할 수 없습니다.
PCH는 빌드 속도를 높일 수 있습니다.
참조와 관련하여 특별한 작업을 수행하지 않습니다. .....

+0

모든 컴파일 할 때 한 번 잠시, 나는 오류가 있습니다 : 나는 그것이 PCH의 CPP 파일에 저 포인트 오류 htis 클릭 # 사용이 실패했습니다 "... Core.dll" 을 두 배로합니다. 이것이 내가 PCH에 참고 문헌을 넣었던 이유입니다. –

+0

프로젝트에 PCH가 전혀 없으면 어떻게 될까요? 프로젝트 종속성을 올바르게 설정 했습니까? 즉 프로젝트 클라이언트는 프로젝트 코어에 의존합니다. 또한 이것이 Debug/Release 문제 일 수 있습니까? 체크 아웃 http://support.microsoft.com/kb/843407 – demoncodemonkey

+0

확실히 디버그/릴리스 문제가 아닙니다. '프로젝트 참조'탭은 디버그 대 릴리스 모드를 무시합니다. –

관련 문제