■ 닷넷 어셈블리 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 } }
|
------------------------------------------------------------------------------------------------------------------------
'C# > Common' 카테고리의 다른 글
[C#/COMMON] Environment 클래스 : UserDomainName 정적 속성을 사용해 사용자와 연결된 네트워크 도메인명 구하기 (0) | 2021.01.26 |
---|---|
[C#/COMMON] WebClient 클래스 : 멀티 파트 폼 업로드하기 (0) | 2021.01.26 |
[C#/COMMON] Microsoft Visual Studio Installer 설치 디렉토리 변경하기 (0) | 2021.01.25 |
[C#/COMMON] 상위 워드 구하기 (0) | 2021.01.24 |
[C#/COMMON] 하위 워드 구하기 (0) | 2021.01.24 |
[C#/COMMON] 닷넷 어셈블리 2.0 버전을 닷넷 4.5 프로젝트에서 사용하기 (0) | 2021.01.22 |
[C#/COMMON] AppDomain 클래스 : AssemblyResolve 이벤트를 사용해 포터블 실행 파일(Portable Executable File) 만들기 (0) | 2021.01.22 |
[C#/COMMON] 모니터 화면 끄기/켜기 (0) | 2021.01.22 |
[C#/COMMON] GuidAttribute 클래스 : 프로젝트의 COM 노출 GUID 구하기 (0) | 2021.01.22 |
[C#/COMMON] Process 클래스 : 지정 프로세스의 IME 모드(한글/영문 모드) 구하기 (0) | 2021.01.22 |
[C#/COMMON] NetworkChange 클래스 : NetworkAddressChanged 정적 이벤트를 사용해 네트워크 주소 변경시 처리하기 (0) | 2021.01.22 |
댓글을 달아 주세요