2011-03-02 1 views
4

Visual Studio 2008 Professional을 사용하고 있으며 두 개의 프로젝트로 솔루션을 만들어야합니다. 하나의 프로젝트는 WinForms C# 프로젝트로 관리되고, 두 번째 프로젝트는 관리되지 않는 DLL C++ 프로젝트입니다.하나의 솔루션으로 관리되지 않는 DLL 프로젝트 및 관리되는 WinForms 응용 프로그램

VS2008에서 생성했고 관리되지 않는 DLL 프로젝트에서 int를 반환하는 간단한 함수를 내 보냈습니다. 관리 윈폼 프로젝트에서 나는 일반적인 방법으로 DLL을 수입 및 레이블에 반환 값을 출력하려고 :

[DllImport("DllProj.dll", EntryPoint = "GetSomeInt", SetLastError = true)] 
private static extern int GetSomeInt(); 

을하지만 솔루션 및 실행을 빌드 할 때, 나는 DllNotFoundException를 얻을. 또한 기존 항목 (DllProj.dll)을 WinForms 프로젝트에 추가하려고 시도했지만 해당 DLL을 Debug 폴더에서 WinForms 프로젝트의 폴더로 복사했지만 컴파일 된 프로젝트가있는 Debug 하위 폴더에는 복사하지 않았습니다. 그래서 나는 아직도 DllNotFoundException을 얻고있다.

는 또한 참조로 추가하려고했으나 VS2008 내 DLL이 COM 또는 관리 대상이 아닌 불평. 내가 빌드 한 후에 WinForms 프로젝트의 Debug 하위 폴더에 컴파일 된 DLL을 수동으로 복사 할 필요가없는 그런 방법으로 솔루션을 구성 할 수있는 방법이 있습니까?

답변

6

빌드 이벤트를 게시하려면 dll 복사본을 추가해야합니다.

Project properties>Build events>Post build event command line을 참조하십시오.

+0

좋아, 거기에, 나는 포스트 빌드 이벤트 명령 줄을 참조하십시오. 그것을 복사 할 마법 명령을 내게 조언 해 주시겠습니까? 미안하지만 나는 처음이 일을하고 전에 그것을 사용한 적이 없다. – sanjuro

+1

간단한 bat-file 구문을 사용하십시오. 예를 들어, "복사 C : \ MyProjectSource \ mydll.dll C : \ MyDestination \" – acoolaum

+0

확인 많은 덕분에, 지금은 – sanjuro

2
  • 복사 각 후 윈폼 프로젝트 컴파일 된 DLL은 "새로운 경우 복사"를 "출력 디렉토리에 복사"속성을
  • 설정을 클릭,
  • 오른쪽 (윈폼 프로젝트에있는) dll을 클릭 구축
+0

Thansk man, 작동하지만, DLL 프로젝트에서 뭔가를 변경하면 WinForms 응용 프로그램의 결과에 반영되지 않습니다. 그래서 내가 상상할 수있는 것처럼 그것을 구성 할 방법이 없습니다. 필요할 때마다 수동으로 복사 할 DLL을 변경합니까? – sanjuro

+1

@sanjuro, 내가 말했듯이 프로젝트의 빌드 이벤트를 게시하기 위해 복사 스크립트를 추가해야합니다. 사후 빌드 이벤트는 각 빌드 후에 실행됩니다. – acoolaum

+0

이전 게시물에서 알지만 그 사본이 어떻게 생겼는지는 모르겠다. :) – sanjuro

2

같이 DllImport는 C 이후 ++ 프로젝트는 C#에서 referemce로 추가 할 수 없습니다 관리되지 않는 응용 프로그램을 windowsforms 당신이 수동으로 또는 postbuild 이벤트에 의해 사용되는 C++ DLL로 복사해야, 관리되지 않는 DLL을 소비 할 수있는 권리 방법입니다 Dll 관리되는 응용 프로그램의 bin 폴더로 가져옵니다.

관련 문제