2009-03-23 4 views
1

DLL 파일에서 을 dllexport로 보내려고합니다. 관리되지 않는 클래스를 다른 에서 사용하려고 시도했습니다. DLL 파일. 그러나 이것을 시도하면 링크 오류가 발생합니다..NET에서 관리되는 DLL의 관리되지 않는 클래스는 어떻게 사용합니까?

관리되지 않는 DLL 파일로이 작업을 많이 했으므로 어떻게 작동하는지 알 수 있습니다. 관리 클래스에서 "public ref"등을 사용하는 방법을 알고 있습니다.

설정해야 할 플래그가 있습니까? 또는 일부 DllImport 마법을 수행해야합니까?

이것은 .NET 2.0 및 Visual Studio 2005에 있습니다.

답변

1

관리되지 않는 라이브러리 또는 COM 구성 요소에 interop 어셈블리를 사용해야합니다. 이에 관한 좋은 정보가있는 a link입니다.

+0

그래서 링크에서 PInvoke를 사용해야합니다. 얼마나 아팠는가. dllimport는 일반적인 관리되지 않는 DLL과 같이 사용할 수 없습니다. – Nick

0

COM DLL 파일이면 COM .NET 상호 운용성을 사용할 수 있습니다. Stack overflow question Is there a best practice for accessing C++ native COM functions to interop from C#?은 이에 대한 또 다른 질문입니다. 당신이 관리 코드에서 관리되지 않는 클래스를 사용하려면

+0

이것은 관리 DLL (명시된 바와 같이)이며 COM DLL은 아닙니다. – Nick

+0

@Nick - 관리 DLL은 Visual Studio에서 COM에 등록하는 옵션을 사용할 수있는 경우 COM 구성 요소로 사용할 수 있습니다. – IDWMaster

3

, 당신은 할 수 있습니다

  1. 사용 성가신 P/Invoke는 클래스 멤버 함수 (생성자, 소멸자, 등)을로드하고 천하고 관리 래퍼 클래스를 만들려면 "실제"멤버 함수를 호출합니다. 가상 메소드가 포함될 때이 상황은 더욱 악화됩니다.
  2. 두 번째 옵션 (내 의견으로는 더 낫다)은 관리되지 않는 클래스에 대한 간단한 프록시 인 C++/CLI 래퍼 클래스 (이 내용에 익숙하다고 언급 했음)를 작성하는 것입니다. 관리되지 않는 클래스에있는 모든 멤버 함수에 대해 프록시 클래스에 비슷한 멤버 함수가 있습니다. 그런 다음 관리되는 프로젝트에서 해당 DLL에 대한 참조를 추가하는 간단한 경우이며 다른 .NET 클래스처럼 클래스를 사용할 수 있습니다. 클래스가 다른 관리되지 않는 항목 (마샬링 할 수없는 항목)을 노출하는 경우 더 많은 작업을 수행 할 것을 고려하십시오.

두 번째 옵션에 대한 추가 정보가 필요하면이 기술에 대해 더 자세히 설명한 몇 가지 오래된 링크를 찾아 볼 수 있습니다.

+0

의견에 감사드립니다. 나는 많은 양의 데이터를 작은 덩어리로 매우 빠르게 읽고 싶기 때문에 래퍼 작성을 피하려고 노력하고있다. 관리되지 않는 채로 있으면 메모리 오버 헤드가 무엇인지 알 수있다. 그러나 PInvoke를 사용하고 싶지는 않습니다! : – Nick

+0

그럴 경우 다른 디자인을 고려해보십시오. 버퍼링과 같은 일종의 논리 일 수도 있고 관리되지 않는 코드에 대한 호출을 줄이기 위해 관리되는 코드에서 관리되지 않는 논리로 일부 논리를 옮기는 것일 수도 있습니다. –

관련 문제