C\#에서 상호작용 성 안내

6580 단어 c#상호 작용 성
머리말
 이 시 리 즈 는 C\#기초 지식 에서 남 겨 진 일련의 것 이다.C\#4.0 에서 의 새로운 특징 은 바로 COM 의 상호작용 개선 이다.그러나 COM 의 상호작용 성 은.NET 플랫폼 에서 의 상호작용 기술 이기 때문에 모두 가.NET 플랫폼 에서 의 상호작용 기술 을 잘 이해 하도록 도와 주기 위해 이 시 리 즈 를 만 들 었 다.그러나 어떤 친구 들 은"왜 우 리 는 상호작용 기술 을 익 혀 야 하 는가?"라 는 의문 을 가 질 수 있다.이 문제 에 대한 해석 은 바로.NET 플랫폼 에서 의 상호 작용 성 기술 을 파악 하면 우리 가.NET 에서 비 위탁 관리 dll 과 COM 구성 요 소 를 호출 하 는 데 도움 을 줄 수 있다 는 것 이다.NET 은 운영 체제 위 에 세 워 진 개발 프레임 워 크 입 니 다.그 중에서.NET 라 이브 러 리 의 클래스 도 Windows API 에 대한 추상 적 인 패키지 입 니 다.그러나.NET 라 이브 러 리 는 모든 Windows API 를 패키지 할 수 없습니다..NET 에서 특정한 기능 을 실현 하지 못 했 을 때 이 기능 은 Windows API 에서 실현 되 었 습 니 다.이때 우 리 는 자신 이.NET 에서 클래스 를 사용자 정의 할 필요 가 전혀 없습니다.이 럴 때 윈도 우 를 호출 할 수 있 습 니 다.  API 의 함수 로 이 루어 집 니 다.이 때 는 위탁 관리 코드 와 비 위탁 관리 코드 의 상호작용 과 관련 되 고 이 때 는 상호 작용 적 인 기술 로 위탁 관리 코드 와 비 위탁 관리 코드 가 더욱 좋 은 상호작용 을 실현 해 야 합 니 다.NET 플랫폼 에서 3 가지 상호 작용 적 인 기술 을 제공 했다.
  • 플랫폼 Invoke(P/Invoke),즉 플랫폼 호출 은 주로 C 라 이브 러 리 함수 와 Windows API 를 호출 하 는 데 사 용 됩 니 다
  • C++Introp 은 주로 Managed C++(위탁 관리 C++)에서 C++라 이브 러 리 를 호출 하 는 데 사 용 됩 니 다
  • COM Interop 은 주로.NET 에서 COM 구성 요 소 를 호출 하고 COM 에서.NET 프로그램 집합 을 사용 하 는 데 사용 된다.
  • 다음은 이 세 가지 기술 에 대해 각각 소개 한다.                                                           
    2.플랫폼 호출
    플랫폼 호출 기술 을 사용 하면 위탁 관리 코드 에서 동적 링크 라 이브 러 리(Dll)에서 이 루어 진 비 위탁 관리 함수,예 를 들 어 Win 32 Dll 과 C/C++가 만 든 dll 을 호출 할 수 있 습 니 다.이 를 보면 어떤 친구 들 은 의문 이 있 을 것 이다.어떤 상황 에서 우 리 는 플랫폼 호출 기술 로 동적 링크 라 이브 러 리 의 비 위탁 관리 함 수 를 호출 할 수 있 습 니까?
    이 문 제 는 앞에서 언급 한 바 와 같이 개발 과정 에서.NET 라 이브 러 리 에서 관련 API 를 제공 하지 않 았 으 나 Win 32 API 에서 관련 함수 가 실현 되 었 을 때 플랫폼 호출 기술 을 사용 하여.NET 개발 응용 프로그램 에서 Win 32 API 중의 함 수 를 호출 하 는 것 을 고려 할 수 있다.
    그러나 또 하나의 사용 장면 은 위탁 관리 코드 의 효율 이 비 위탁 관리 코드 보다 못 하기 때문에 효율 을 높이 기 위해 위탁 관리 코드 에서 C 라 이브 러 리 함 수 를 호출 하 는 것 도 고려 할 수 있다.
    2.1 위탁 관리 코드 에서 플랫폼 호출 을 통 해 비 위탁 관리 코드 를 호출 하 는 절차
    (1).  비 위탁 관리 함수 의 정보,즉 dll 의 이름,호출 해 야 할 비 위탁 관리 함수 이름 등 정 보 를 얻 습 니 다.
    (2).위탁 관리 코드 에서 비 위탁 관리 함수 에 대해 설명 하고 플랫폼 호출 에 필요 한 속성 을 추가 합 니 다.
    (3).위탁 관리 코드 에서 두 번 째 단계 에서 설명 한 위탁 관리 함 수 를 직접 호출 합 니 다.
    2.2 플랫폼 호출 과정
    (1)  이 함 수 를 포함 하 는 DLL 을 찾 습 니 다.어떤 함 수 를 호출 해 야 할 때 첫 번 째 단 계 는 이 함 수 를 포함 하 는 DLL 의 위 치 를 알 아야 합 니 다.그래서 플랫폼 호출 의 첫 번 째 단 계 는 DLL 을 찾 는 것 입 니 다.사실은 위탁 관리 코드 에서 비 위탁 관리 코드 를 호출 하 는 호출 과정 은 누 군가 에 게 일 을 하 라 고 상상 할 수 있 습 니 다.먼저 우 리 는 그 사람 이 어디 에 있 는 지(즉,함 수 를 찾 는 DLL 과정)를 찾 아야 합 니 다.그 사람 을 찾 으 면 할 일 을 알려 줘 야 합 니 다.
    (2)찾 은 DLL 을 메모리 에 불 러 옵 니 다.
    (3)함수 가 메모리 에 있 는 주 소 를 찾 고 그 매개 변 수 를 스 택 에 밀어 넣 어 필요 한 데 이 터 를 봉 합 니 다.CLR 은 함수 가 처음 호출 될 때 만 DLL 을 찾 고 불 러 오 며 함수 가 메모리 에 있 는 주 소 를 찾 습 니 다.함수 가 한 번 호출 된 후에 CLR 은 함수 의 주 소 를 캐 시 합 니 다.CLR 이라는 기 제 는 플랫폼 호출 의 효율 을 높 일 수 있 습 니 다.프로그램 도 메 인 이 마 운 트 해제 되 기 전 까지 찾 은 DLL 은 메모리 에 계속 존재 합 니 다.
    (4)비 위탁 관리 함 수 를 집행 한다.
    플랫폼 호출 과정 은 다음 그림 을 통 해 더욱 잘 이해 할 수 있다.

    3.C++Interop
    두 번 째 부분 은 주로 여러분 에 게 첫 번 째 상호작용 기술 을 소개 한 다음 에 우 리 는 C++Interop 기술 로 비 위탁 관리 코드 와 상호작용 을 할 수 있 습 니 다.그러나 C++Interop 방식 은 플랫폼 호출 과 다른 점 이 있 습 니 다.바로 C+Interop 은 위탁 관리 코드 와 비 위탁 관리 코드 가 한 프로그램 에 집중 되 고 심지어 같은 파일 에 존재 하도록 허용 합 니 다.C++Interop 은 소스 코드 에 비 위탁 관리 코드 를 직접 연결 하고 컴 파일 하여 비 위탁 관리 코드 와 상호작용 을 하 는 것 이 고 플랫폼 호출 은 컴 파일 된 비 위탁 관리 DLL 을 불 러 오고 함수 의 입구 주 소 를 찾 아 비 위탁 관리 함수 와 상호작용 을 하 는 것 입 니 다.C++Interop 은 위탁 관리 C++를 사용 하여 비 위탁 관리 C+코드 를 포장 한 다음 에 생 성 프로그램 집합 을 컴 파일 한 다음 에 위탁 관리 코드 에서 이 프로그램 집합 을 참조 하여 비 위탁 관리 코드 와 의 상호 작용 을 실현 합 니 다.구체 적 인 사용 과 플랫폼 호출 에 대한 비교 에 대해 여 기 는 소개 가 많 지 않 습 니 다.저 는 뒤의 주제 에서 구체 적 으로 소개 하 겠 습 니 다.
    COM Interop
    COM(Component Object Model,구성 요소 대상 모델)은 마이크로소프트 가 이전에 추천 한 개발 기술 이다.마이크로소프트 가 지난 10 여 년 동안 대량의 COM 구성 요 소 를 개 발 했 지만.NET 기술 로 이러한 COM 구성 요소 가 실현 하 는 기능 을 다시 쓸 수 없 기 때문에.NET 에서 의 위탁 관리 코드 가 COM 구성 요 소 를 호출 할 수 있 는 문 제 를 해결 하기 위해.NET 플랫폼 에서 COM Interop 을 제공 했다.COM 상호 운용 기술 인 COM Interop 은 위탁 관리 코드 에 COM 구성 요 소 를 사용 하 는 것 은 물론 CMO 구성 요소 기능 위탁 관리 대상 도 지원 한다.다음은 이 두 가지 지원 에 대해 각각 소개 하 겠 습 니 다.
    4.1.NET 에서 COM 구성 요소 사용
     .NET 에서 COM 대상 을 사용 하 는 방법 은 주로 세 가지 가 있 습 니 다.
  • TlbImp 도 구 를 사용 하여 COM 구성 요소 에 초기 COM 대상 을 연결 하 는 상호작용 프로그램 집합 을 만 듭 니 다.그러면 프로그램 에 상호작용 프로그램 집합 을 추가 하여 COM 대상 을 호출 할 수 있 습 니 다
  • 반 사 를 통 해 나중에 COM 대상 을 귀속 시 킵 니 다
  • P/Invoke 를 통 해 COM 대상 을 만 들 거나 C++Interop 을 사용 하여 COM 대상 에 포장 류 를 작성 합 니 다.
  • 그러나 우리 가 자주 사용 하 는 것 은 모두 방법 1 이다.다음은 사용 방법 1.NET 에서 COM 대상 을 사용 하 는 절 차 를 소개 한다.
          1.사용 할 COM 구성 요 소 를 찾 아 등록 합 니 다.regsvr 32.exe 를 사용 하여 COM DLL 을 등록 하거나 취소 합 니 다.                               
          2.프로젝트 에 COM 구성 요소 나 형식 라 이브 러 리 에 대한 인용 을 추가 합 니 다.                            
  • 인용 을 추가 할 때 Visual Studio 는 Tlbimp.exe(형식 라 이브 러 리 가 져 오기 프로그램)를 사용 하고 Tlbimp.exe 프로그램 은.NET Framework 상호 작용 프로그램 집합 을 생 성 합 니 다.이 프로그램 집합 은 실행 시 호출 가능 한 포장(RCW)이 라 고도 부 르 는데,포장 COM 구성 요소 의 클래스 와 인 터 페 이 스 를 포함한다.Visual Studio 는 생 성 된 구성 요소 의 인용 을 항목 에 추가 합 니 다.                             
  •       3.RCW 클래스 의 인 스 턴 스 를 만 들 면 위탁 관리 대상 처럼 COM 대상 을 사용 할 수 있 습 니 다.
    다음은.NET 에서 COM 구성 요 소 를 사용 하 는 과정 을 그림 을 통 해 잘 설명 한다.

    4.2 COM 에서.NET 프로그램 집합 사용
     .NET 공용 언어 가 실 행 될 때 COM 호출 패키지(COM Callable Wrapper,즉 CCW)를 통 해 COM 형식 라 이브 러 리 와 의 상호작용 을 수행 할 수 있 습 니 다.CCW 는 COM 클 라 이언 트 로 하여 금 일반적인 COM 형식 과 상호작용 을 하고 있다 고 생각 하 게 하 는 동시에.NET 구성 요소 로 하여 금 위탁 관리 응용 프로그램 과 상호작용 을 하고 있다 고 생각 하 게 할 수 있다.여기 서 CCW 는 비 위탁 관리 COM 클 라 이언 트 와 위탁 관리 대상 간 의 대리 입 니 다.CCW 는 위탁 관리 대상 의 라 이 프 사이클 을 유지 할 수 있 을 뿐만 아니 라 데이터 형식 이 COM 과.NET 간 의 상호 전환 도 책임 진다.COM 에서.NET 형식 을 사용 하 는 기본 절 차 를 실현 합 니 다.예 를 들 어:
    1.C\#항목 에 상호작용 기능 추가
         C\#항목 속성 을 수정 하여 프로그램 집합 이 COM 에 보이 도록 할 수 있 습 니 다.오른쪽 단 추 를 누 르 면 솔 루 션 의 속성 을 선택 합 니 다."프로그램 탭"에서"프로그램 집합 정보"단 추 를 선택 하고 팝 업 대화 상자 에서"프로그램 집합 COM 을 볼 수 있 도록"옵션 을 선택 하 십시오.아래 그림 과 같 습 니 다.

    2.COM 형식 라 이브 러 리 를 생 성하 고 COM 클 라 이언 트 가 사용 할 수 있 도록 등록 합 니 다.
     "생 성"탭 에서"COM 상호 작용 등록"옵션 을 선택 하면 다음 그림 과 같 습 니 다.

    'COM 상호작용 등록'옵션 을 선택 하면 Visual Studio 는.NET 프로그램 집합 에 COM 형식 라 이브 러 리 를 생 성하 고 프로그램 집합 등록 도구(Regasm.exe)를 사용 하여.NET 프로그램 집합 과 생 성 된 COM 형식 라 이브 러 리 를 등록 합 니 다.이 COM 클 라 이언 트 는 CCW 서 비 스 를 사용 하여.NET 대상 을 호출 할 수 있 습 니 다.
    총화
    여기까지 소개 하면 본 주제 의 내용 은 끝 납 니 다.본 주 제 는 주로.NET 이 제공 하 는 상호작용 기술 에 대해 전체적인 요약 을 했 고 뒤의 주제 에서 구체 적 인 기술 에 대해 상세 하 게 소개 하고 간단 한 사용 예 를 제시 할 것 입 니 다.
    이상 은 C\#에서 상호작용 성 프로필 의 상세 한 내용 입 니 다.c\#상호작용 성에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기