2012-01-17 4 views
2

우리는 C++로 작성된 혼합 모드 DLL을 사용하여 기본 C++ DLL을 래핑하고 관리되는 클래스를 노출합니다. 노출 된 관리되는 클래스에서 PresentationCore.DLL의 일부인 Vector3D 등의 메서드 인수를 사용합니다.혼합 모드 DLL presentationcore.dll에 연결

따라서 혼합 모드 C++ 코드는 PresentationCore.DLL을 참조해야합니다. 우리는이 폴더를 다른 시스템에 차이가 있기 때문, 나쁜

. PresentationCore.dll가에 살고있는 폴더를 포함하는 프로젝트의 검색 경로를 필요로

#using <PresentationCore.dll> 

를 통해이 작업을 수행하고, 우리의 프로젝트는 않고 컴파일해야 몇몇 기계에 변화. 현재 우리는 코드 저장소에 PresentationCore.dll 사본을 포함시켜이 문제를 해결했으며, 이는 분명 좋은 해결책이 아닙니다.

GAC를 통해 완벽하게 액세스 할 수있는 DLL에 대한 명시 적 경로를 지정하는 방법에 대한 제안에 감사드립니다.

+0

GAC에 프리젠 테이션 코드가 없습니까? V3 및 V4 (x86 및 AMD 64)는 내 GAC에 있습니다. MC++ –

+0

에 GACed 어셈블리에 대한 검색 경로를 추가해야합니까? 예, GAC에 있습니다. 그러나 dll이 직접 검색된 경로에도없는 경우 using 문이 실패하므로 C++ 컴파일러는 거기에 보이지 않습니다. – user816098

답변

-1

GAC는이 내가 심볼릭 링크를 사용하는 것 같은 상황에서의 % windir % \ 조립 \ 다음 하위 디렉토리 GAC_32 또는 GAC_64

에서 발견된다. 로컬 디렉토리에있는 DLL에 대한 링크를 만듭니다. 그런 다음 해당 링크에서 컴파일하십시오.

예 각 기계마다 변경해야합니다. 하지만 할 일은 일괄 처리 스크립트를 사용하는 것입니다.

내 컴퓨터에서 실행하는 것을 고려하십시오.

C:\temp>for /f "tokens=*" %f in ('dir \windows\assembly\presentationcore.dll /s/b') do @echo %f 
C:\windows\assembly\GAC_32\PresentationCore\3.0.0.0__31bf3856ad364e35\PresentationCore.dll 
C:\windows\assembly\GAC_64\PresentationCore\3.0.0.0__31bf3856ad364e35\PresentationCore.dll 

필요한 것을 선택하고 (예 : GAC_64) 링크를 설정하십시오. 필요한 것이 전부입니다.

@for /f "tokens=*" %f in ('dir \windows\assembly\presentationcore.dll /s/b') do @echo %f | @findstr GAC_64 | mklink .\presentationCore.dll "%f" 
+0

* 프로젝트의 GAC에서 절대 어셈블리를 참조하지 마십시오. GAC는 배포 세부 정보입니다. GAC의 어셈블리 사본은 특히 .NET 4 이후의 참조 어셈블리와 동일하지 않습니다. –

+0

@HansPassant 감사합니다. –

1

#using <PresentationCore.dll>하지 마십시오. 프로젝트를 마우스 오른쪽 단추로 클릭하고 References...으로 이동하여 Add New Reference...을 클릭하고 .Net 탭에서 PresentationCore을 선택하십시오. 내가 일을 가지고

http://msdn.microsoft.com/en-us/library/aa970266.aspx

0

휴 : 나는에서 힌트를 얻었다. 나는 네이티브 프로젝트를 가지고 있고 동일한 문제가 있었는데 hwnds에 대한 분석을하기 위해 PresentationCore의 HwndSource를 사용해야합니다. 내가 한 것은 내 프로젝트를 네이티브 (no/clr 스위치)로 남겨 두었다가 HwndSource를 사용하는 기능을 가진 소스 파일에 대해/clr 스위치를 추가하여 예외 처리와 같은 다른 소스에 대한 설정을 포함 할 수있게했다는 것입니다 등.

#using <System.dll> 
#using <WindowsBase.dll> 
#using <PresentationFramework.dll> 
#using <PresentationCore.dll> 
#using <UIAutomationProvider.dll> 
#using <UIAutomationTypes.dll> 

이것은 제대로 작동하므로 Intellisense 지원을받지 못합니다. 그리고 결과에 나오는 몇 가지 경고 사항, 당신이 그걸로 살 수 있다면, 이것은 당신을위한 것입니다.