관리 메뉴

제목없음

C#에서 COM 객체 사용하기 본문

프로그램 작성/컴퓨터 언어

C#에서 COM 객체 사용하기

다람군 2012.06.30 01:41

C#이 동작하는 .NET Framework의 CLR은 COM 객체를 사용할 수 있도록 도와줍니다. 특히 .NET Framework에 포함된 Marshal API는 COM 객체를 사용하기 용이하도록 도와주고 있지요.

C#에서는 ComImport라고 하는 속성을 이용하여 COM 인터페이스를 구성할 수 있습니다. 여기 들어가는 값은 GUID 값과 인터페이스 타입인데, GUID 값은 해당 COM 객체 인터페이스의 고유 ID값, 그리고 인터페이스 타입은 세 가지로, IUnknown를 상속하는지 IDispatch를 상속하는지, 혹은 Dual이라고 하여 한 객체로 여러 인터페이스를 사용할 수 있는지를 뜻합니다.

예를 들어, IUnknown은 IDirect3D9과 같은 클래스가 해당됩니다. Dual은 IMediaControl과 같은 클래스가 해당됩니다. IDispatch는 잘 모르겠지만 이를 상속받는 클래스가 해당 되겠지요.

COM 객체의 사용이 끝나면 Marshal.ReleaseComObject 함수를 이용해 Release 해주면 됩니다.

아래는 Direct3D9 API에 포함되는 IDirect3D9 인터페이스의 C# 인터페이스입니다.

[ComImport, SuppressUnmanagedCodeSecurity,    Guid ( "81BDCBCA-64D4-426d-AE8D-AD0147F4275C" ),
    InterfaceType ( ComInterfaceType.InterfaceIsIUnknown )]
    interface IDirect3D9
    {
        [PreserveSig]
        int RegisterSoftwareDevice ( [In, Out]IntPtr pInitializeFunction );
        [PreserveSig]
        int GetAdapterCount ();
        [PreserveSig]
        int GetAdapterIdentifier ( uint Adapter, uint Flags, uint pIdentifier );
        [PreserveSig]
        uint GetAdapterModeCount ( uint Adapter, D3DFORMAT Format );
        [PreserveSig]
        int EnumAdapterModes ( uint Adapter, D3DFORMAT Format, uint Mode, [Out] out D3DDISPLAYMODE pMode );
        [PreserveSig]
        int GetAdapterDisplayMode ( ushort Adapter, [Out]out D3DFORMAT Format );
        [PreserveSig]
        int CheckDeviceType ();
        [PreserveSig]
        int CheckDeviceFormat ();
        [PreserveSig]
        int CheckDeviceMultiSampleType ();
        [PreserveSig]
        int CheckDepthStencilMatch ();
        [PreserveSig]
        int CheckDeviceFormatConversion ();
        [PreserveSig]
        int GetDeviceCaps ();
        [PreserveSig]
        IntPtr GetAdapterMonitor ( uint Adapter );
        [PreserveSig]
        int CreateDevice ( int Adapter,
                         D3DDEVTYPE DeviceType,
                         IntPtr hFocusWindow,
                         CreateFlags BehaviorFlags,
                         [In, Out] ref D3DPRESENT_PARAMETERS pPresentationParameters,
                         [Out]out IntPtr ppReturnedDeviceInterface );
    }
0 Comments
댓글쓰기 폼