2015-01-23 1 views
0

정적 라이브러리를 출력하는 Visual Studio 프로젝트가 있으며이 프로젝트를 유지하고 싶습니다. 하지만 정적 라이브러리의 많은 클래스가 포함 된 dll이 필요하므로 C# 응용 프로그램에서 dll을 가져오고 내 보낸 함수를 사용할 수 있습니다.Visual Studio dll 프로젝트에서 .lib 링크 및 클래스/함수 내보내기

응용 프로그램 유형이 dll 인 콘솔 응용 프로그램을 만들었으며 lib를 참조했습니다. 모든게 잘된 것처럼 보이지만 dll을 dumpbin에서 실행할 때 내보낼 것은 없습니다.

제 질문은 어떻게 lib에있는 클래스를 내보내는 것입니까?

답변

0

클래스 정의에 _declspec(export) 키워드를 사용해야합니다.

많은 시간이 프로젝트의 일부 변종과의 매크로 정의를 볼 수 있습니다 :

#define DllExport __declspec(dllexport)

Here's an article from MSDN.

예 :

class __declspec(dllexport) Foo 
{ 
// ... 
}; 

또는 다른 답변에서 말한 바와 같이

class DllExport Foo 
{ 
    // ... 
}; 
+0

나는 이것을했다. 이 라이브러리에 MyClass.h에 추가했고 lib 디렉토리를 내 dll 프로젝트에 참조했습니다. 그러나 MyClass를 빌드 할 때 내보내지지 않습니다. – spartacus

+0

DLL을 빌드 할 때 정상 검사로서 .obj 파일을 생성합니까? – PDizzle745

+0

네, 그 파일을 만들고 있어요. – spartacus

0

, 당신은 __declspec를 사용하여 DLL에서 C++ 클래스를 내보낼 수 있지만, 그건 것처럼 소리가 나지 않는다 C#에서 C# 클래스를 이해하지 못하는이 라이브러리를 사용하고 P/Invoke를 사용하면 메소드 이름이 섞일 것이므로 어색 할 것입니다. C의 #에서 C++ 클래스를 액세스하기위한

일부 간단한 옵션 :

  1. 당신은 CLR 클래스 라이브러리로 C++ 라이브러리를 구축하고, .NET 클래스와 C++ 클래스를 마무리하고 해당 클래스 라이브러리를 참조 할 수있다 C# 프로젝트에서.

  2. Swig을 사용하면 C++ 코드 주위에 C# 래퍼를 생성 할 수 있습니다.

  3. __declspec(dllexport)을 사용하여 DLL에서 내보내고 C#에서 P/Invoke를 사용하여 호출 할 수있는 C 함수 집합으로 C++ 클래스를 마무리 할 수 ​​있습니다.

나는 어쩌면 "DLL 디버그"와 "DLL 릴리스"라는 기존의 정적 라이브러리 프로젝트에 구성을 구축 추가 제안 및 변경 거라고하지만 당신은 정말 DLL에서 C++ 클래스를 내보낼 경우 정적 라이브러리에 DLL을 연결하는 것만으로 정적 라이브러리에있는 것을 내보내는 것이 아니라 현재 빌드 된 구성이 DLL로 빌드되도록 설정해야합니다.

관련 문제