2011-02-17 3 views
0

dllimport를 사용하여 win32 dll 함수를 호출하는 win32 cpp dll과 C# 프로젝트 (PROJ_1)가 있습니다. 이 dll은 PROJ_1 프로젝트에 포함되어 있으며 dir 출력으로 복사 작업을 빌드합니다.C# 프로젝트에서 cpp dll 사용

다른 C# 프로젝트 (PROJ_2)는 PROJ_1 을 참조하고 PROJ_3은 PROJ_2를 참조합니다. PROJ_1의 빈에서 1. 내가는 Win32 DLL을 가지고 : 내가 VS 2010 년에 구축 할 때

그래서, 지금 우리는이 PROJ_3-> PROJ_2-> PROJ_1 (DLL) 같은 그래서

있습니다. 2. PROJ_2의 bin에도 too 3. PROJ_3에서 win32 DLL이 없습니다.

문제를 해결하는 방법은 무엇입니까? 내가 제안

답변

0

, 당신은 PROJ3 솔루션 및 속성에서 관리되지 않는 DLL은 "출력 디렉토리로 복사"설정 "복사 항상"

0

당신은 PROJ_2에 대한 참조의 '로컬 복사'속성을 확인할 수있는 것을 추가 . PROJ_1에서는 솔루션에 win32 dll을 추가합니다 (참조가 없으며 솔루션의 클래스처럼 파일로 추가). Build Action = Content, Copy to Output Directory = Copy Always 속성을 설정합니다.

1

프로젝트가 하나의 VS 솔루션에있는 경우 제대로 정의 된 프로젝트간에 종속성이 있습니까 (프로젝트 -> 프로젝트 종속성을 마우스 오른쪽 단추로 클릭)? 모든 프로젝트가 동일한 대상 아키텍처 (64/86)로 구축 되었습니까?

사이드 질문 - C++/CLI 래퍼 작성을 고려 했습니까?

+0

C++/CLI 래퍼 대 dllimport를 사용하는 것이 가장 좋습니다. – cyssima

+0

@cyssima 나는 그렇게까지 나아 가지 않을 것이지만, DllImport보다 C++/CLI에 대한 더 나은 경험을 가지고 있습니다. DllImport를 사용할 수 없거나 매우 사용하기 어려운 상황이 있습니다 (예 : 개체를 반환하고 받아들이는 복잡한 API, 일반 클래스 등). –

+0

아. 승인. 그래서, 내 질문에 가서 : 이것은 하나의 해결책이다; 의존성은 정확하다; 실제로 이러한 프로젝트의 대상 플랫폼은 x86이지만이 솔루션에는 AnyCPU 구성에서 빌드하는 다른 프로젝트가 있습니다. – cyssima