첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

728x90
반응형

■ 닷넷 어셈블리 2.0 버전을 닷넷 4.5 프로젝트에서 사용하기

------------------------------------------------------------------------------------------------------------------------

아래 코드는 닷넷 어셈블리 2.0 버전을 닷넷 4.5 프로젝트에서 사용하기 위해서 .config 파일을 설정하는 대신 코드로 설정하는 예제이다.

 

RuntimePolicyHelper.cs

 

 

using System;

using System.Runtime.CompilerServices;

using System.Runtime.InteropServices;

 

namespace TestProject

{

    /// <summary>

    /// 런타임 정책 헬퍼

    /// </summary>

    public static class RuntimePolicyHelper

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Interface

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region CLR 런타임 정보 인터페이스 - ICLRRuntimeInfo

 

        /// <summary>

        /// CLR 런타임 정보 인터페이스

        /// </summary>

        [ComImport]

        [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

        [Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")]

        private interface ICLRRuntimeInfo

        {

            //////////////////////////////////////////////////////////////////////////////////////////////////// Method

 

            #region 버전 문자열 구하기 - xGetVersionString()

 

            /// <summary>

            /// 버전 문자열 구하기

            /// </summary>

            void xGetVersionString();

 

            #endregion

            #region 런타임 디렉토리 구하기 - xGetRuntimeDirectory()

 

            /// <summary>

            /// 런타임 디렉토리 구하기

            /// </summary>

            void xGetRuntimeDirectory();

 

            #endregion

            #region 로드 여부 구하기 - xIsLoaded()

 

            /// <summary>

            /// 로드 여부 구하기

            /// </summary>

            void xIsLoaded();

 

            #endregion

            #region 로드 가능 여부 구하기 - xIsLoadable()

 

            /// <summary>

            /// 로드 가능 여부 구하기

            /// </summary>

            void xIsLoadable();

 

            #endregion

            #region 에러 문자열 로드하기 - xLoadErrorString()

 

            /// <summary>

            /// 에러 문자열 로드하기

            /// </summary>

            void xLoadErrorString();

 

            #endregion

            #region 라이브러리 로드하기 - xLoadLibrary()

 

            /// <summary>

            /// 라이브러리 로드하기

            /// </summary>

            void xLoadLibrary();

 

            #endregion

            #region 프로시저 주소 구하기 - xGetProcAddress()

 

            /// <summary>

            /// 프로시저 주소 구하기

            /// </summary>

            void xGetProcAddress();

 

            #endregion

            #region 인터페이스 구하기 - xGetInterface()

 

            /// <summary>

            /// 인터페이스 구하기

            /// </summary>

            void xGetInterface();

 

            #endregion

            #region 디폴트 시작시 플래그 설정하기 - xSetDefaultStartupFlags()

 

            /// <summary>

            /// 디폴트 시작시 플래그 설정하기

            /// </summary>

            void xSetDefaultStartupFlags();

 

            #endregion

            #region 디폴트 시작시 플래그 구하기 - xGetDefaultStartupFlags()

 

            /// <summary>

            /// 디폴트 시작시 플래그 구하기

            /// </summary>

            void xGetDefaultStartupFlags();

 

            #endregion

            #region 레거시 버전 2 런타임 바인딩하기 - BindAsLegacyV2Runtime()

 

            /// <summary>

            /// 레거시 버전 2 런타임 바인딩하기

            /// </summary>

            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]

            void BindAsLegacyV2Runtime();

 

            #endregion

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Public

 

        #region 레거시 버전 2 런타임 성공적 이용 가능 여부 - LegacyV2RuntimeEnabledSuccessfully

 

        /// <summary>

        /// 레거시 버전 2 런타임 성공적 이용 가능 여부

        /// </summary>

        public static bool LegacyV2RuntimeEnabledSuccessfully { get; private set; }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Static

 

        #region 생성자 - RuntimePolicyHelper()

 

        /// <summary>

        /// 생성자

        /// </summary>

        static RuntimePolicyHelper()

        {

            ICLRRuntimeInfo clrRuntimeInfo = (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject

            (

                Guid.Empty,

                typeof(ICLRRuntimeInfo).GUID

            );

 

            try

            {

                clrRuntimeInfo.BindAsLegacyV2Runtime();

 

                LegacyV2RuntimeEnabledSuccessfully = true;

            }

            catch(COMException)

            {

                LegacyV2RuntimeEnabledSuccessfully = false;

            }

        }

 

        #endregion

    }

}

 

 

AudioPlayer.cs

 

※ 아래 소스 코드는 실행이 되지 않는 참조용 예제 코드이다.

 

namespace TestProject

{

    /// <summary>

    /// 오디오 플레이어

    /// </summary>

    public class AudioPlayer

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 오디오 엔진

        /// </summary>

        private IAudioEngine audioEngine;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Consturctor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - AudioPlayer()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public AudioPlayer()

        {

            if(RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully)

            {

                this.audioEngine = new AudioEngine20();

            }

            else

            {

                this.audioEngine = new AudioEngine45();

            }

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 재생하기 - Play(filePath)

 

        /// <summary>

        /// 재생하기

        /// </summary>

        /// <param name="filePath">파일 경로</param>

        public void Play(string filePath)

        {

            this.audioEngine.Play(filePath);

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

728x90
반응형
Posted by 사용자 icodebroker

댓글을 달아 주세요