COM 및.NET 상호 작용의 간단한 예

4953 단어 .net
안내: 본문은 VB6를 예로 삼아 주로 소개한다.NET 참조COM 및 COM 참조.NET의 두 가지 간단한 예.
<1>.NET 호출 COM
간단하게 하기 위해서 우리는 VB6, 이 곧 개원될 오래된 골동품을 사용하여 간단한 COM을 만들었다.
VB6에서 클래스ComCalc만 있는 ActiveX dll 프로젝트를 새로 만듭니다.cls, 코드는 다음과 같습니다.
주의호환성 설정 및 dll 생성
그리고 vs 2010에 콘솔 프로젝트를 새로 만들었는데 마이크로소프트가 이상해요. VB6의 프로젝트는 프로젝트라고 하는데 vs 2002부터'프로젝트'라고 이름을 바꿨어요.방금 만든 COM에 대한 참조 추가
실행 효과:
아마도 많은 사람들이 이 c# 코드에 대해 궁금해 할 것이다. 이거ComCalc은 언제 생겼습니까?왜 그것을 통해 방법을 호출합니까? 클래스의 대상이 아니라 그것을 통해 방법을 호출합니까?
먼저 방금 COM을 인용한 VS IDE가 우리에게 무엇을 해줬는지 살펴보겠습니다.
위 그림에서 Interop.SimpleComServer.dll은 IDE가 우리를 위해 생성한 '상호작용 프로그램 집합' 이라는 동쪽이고, 이 동쪽은 바로COM과 같다.NET 중간의 다리.
객체 뷰를 통해 볼 수 있는ComCalc은 이 dll에서 생성됩니다.우리는 OLEView를 통해exe가 이 Interop를 살펴보겠습니다.SimpleComServer.dll의 Typelib.
만약 당신이 VB6를 모두 설치했다면, VB 디렉터리에서OLEView를 찾을 수 있습니다.exe, 실행하십시오.만약 당신이 완전히 설치하지 않았다면, 당신은 vs2010 자체 가지고 있는OLEView를 실행할 수 있습니다.에 자리잡다,...
E:\Program Files\Microsoft SDKs\Windows\v7.0A\bin 아래
SimpleComServer를 찾아 두 번 클릭
COM 규칙에 따르면 COM 클라이언트와 COM 클래스가 상호작용하는 유일한 방법은 인터페이스 인용을 사용하는 것이지 대상 인용이 아니다.
C++ 기반의COM 클라이언트를 만들면 특정 인터페이스에 대한 조회 과정을 주목해야 하며, 인터페이스가 더 이상 사용되지 않으면 반드시 풀어야 한다.
VB6에서 만든 클라이언트의 경우 기본 인터페이스가 자동으로 사용됩니다.
이제 C# 코드로 돌아갑니다.

   
     
_ComCalc itfComInterface = null ; // COM
ComCalcClass comObj = new ComCalcClass(); // COM
itfComInterface = (_ComCalc)comObj; // COM
Console.WriteLine( " COM server says 10 + 832 is {0} " ,itfComInterface.Add( 10 , 832 )); // COM

<2>COM 호출.NET
COM 클라이언트와 COM 클래스가 상호작용하는 유일한 방법은 인터페이스 인용이 아니라 대상 인용을 사용하는 것이다.그러나NET에는 인터페이스가 필요하지 않습니다.이때, 우리는 모든 공공 구성원이 기본 인터페이스로 공개되는 것을 확보해야 한다.
다음 세 개의 열거 값 중 하나인 [ClassInterface] 특성을 설정해야 합니다.
AutoDual: 클래스에 대해 이중 클래스 인터페이스를 자동으로 생성하고 COM에 공개하도록 지시합니다.이 인터페이스에 형식 정보를 생성하여 형식 라이브러리에 발표합니다.ClassInterface Attribute에서 기술한 버전 제어의 제한 때문에 Autodual을 사용하지 않는 것을 강력히 권장합니다.
AutoDispatch: 이 클래스는 COM 클라이언트의 사후 바인딩만 지원함을 나타냅니다.요청할 때, 이 종류의 디스핀터face는 자동으로 COM 클라이언트에 공개됩니다.Tlbexp.exe (형식 라이브러리 내보내기 프로그램) 에서 생성된 형식 라이브러리는 디스핀터face의 형식 정보를 포함하지 않아서 클라이언트 캐시 인터페이스의 DISPID를 방지합니다.클라이언트가 인터페이스에 후기에만 귀속될 수 있기 때문에 dispinterface는ClassInterface Attribute에서 기술한 버전 제어 문제가 발생하지 않습니다.ClassInterface Attribute의 기본 설정입니다.
None: 클래스에 클래스 인터페이스를 생성하지 않음을 나타냅니다.인터페이스가 명시적으로 구현되지 않으면 클래스는 IDispatch 인터페이스를 통해서만 후기 바인딩 액세스를 제공할 수 있습니다.ClassInterface Attribute에 권장되는 설정입니다.클래스식으로 이루어진 인터페이스를 통해 기능을 공개하려면 유일한 방법은ClassInterfaceType를 사용하는 것이다.None.
자세한 내용은 MSDN: http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.classinterfacetype.aspx
새 vs 2010 프로젝트를 만듭니다.
주의: 최선의 실천으로서 마땅히.NET 프로그램이 GAC에 배포됩니다.서명하려면 SNK 파일이 필요합니다.GAC에 배포되지 않으면 COM 애플리케이션과 동일한 경로로 복제해야 합니다.
GAC 배포 선택
배포 성공!
내려와서 필요한 COM 라이브러리를 만들어야 합니다.tlbexp를 사용할 수 있습니다.exe 명령, 물론 UI 인터페이스를 통해서도 가능합니다.
이제 OLEView를 사용해볼게요.보기
새 Vb 표준 exe 프로젝트를 만들고 참조를 추가합니다.
원본 다운로드
초청월주: 본고의 판권은 초청월과 블로그원이 공동으로 소유하고 전재는 출처를 밝혀 주십시오.남을 돕는 것은 자조하는 것과 같다!   [email protected]

좋은 웹페이지 즐겨찾기