본문 바로가기

분류 전체보기115

Dictionary를 다른 Dictionary에 복사하는 방법 1. Constructor를 사용한 복사Dictionary originalDict = new Dictionary(){ { "One", 1 }, { "Two", 2 }, { "Three", 3 }};Dictionary copiedDict = new Dictionary(originalDict); 2. ToDictionary() 메소드를 사용한 복사using System.Linq;Dictionary originalDict = new Dictionary(){ { "One", 1 }, { "Two", 2 }, { "Three", 3 }};Dictionary copiedDict = originalDict.ToDictionary(entry => entry.Key, entry => en.. 2024. 9. 29.
Endian 변환 시스템 엔디안 감지엔디안 변환#include #include #include // 엔디안 변환 함수uint16_t swap_endian_16(uint16_t val) { return (val > 8);}uint32_t swap_endian_32(uint32_t val) { return ((val >> 24) & 0x000000FF) | ((val >> 8) & 0x0000FF00) | ((val > 56) & 0x00000000000000FF) | ((val >> 40) & 0x000000000000FF00) | ((val >> 24) & 0x0000000000FF0000) | ((val >> 8) &.. 2024. 6. 26.
File File Sizeif (!File.Exists(filePath)){ return;}FileInfo info = new FileInfo(filePath);long fileSize = info.Length; 2024. 6. 10.
함수 결과 처리 코드 간소 원래 내용ENUM_VALUE enum_value = TestFunction();switch (enum_value){ case ENUM_VALUE::SUCC; LogNormal("SUCC"); return enum_value; case ENUM_VALUE::FAIL; LogError("FAIL"); return enum_value; case ENUM_VALUE::ABORT; LogInfo("ABORT"); return enum_value; case ENUM_VALUE::RETRY; LogInfo("RETRY"); return enum_value;}    매크로 이용#include enu.. 2024. 5. 29.
Path M : Move To L : Line To C : Cubic Bezier Curve- 4개의 포인트 필요- 현재 위치가 시작점- 현재 위치(30,20) 에서 (70,20) 까지 (50,0) 과 (70,20) 의 영향을 받는(해당 포인트를 꼭 통과하지는 않음)  곡선을 그린다. Z : Close Path 2024. 5. 18.
Attribute 메타데이터를 코드에 추가하는 데 사용되는 구조체 1. Obsolete : 클래스나 메서드가 더 이상 사용되지 않고 대체될 것임을 표시class Program{ // ObsoleteMethod => Warning [Obsolete("삭제 예정. ModifiedMethod() 추천")] public static void ObsoleteMethod() { Console.WriteLine("삭제 예정 함수(경고)"); } // ObsoleteMethod => Error [Obsolete("삭제 예정. ModifiedMethod() 사용 필수", true)] public static void ObsoleteMethod() { Console.WriteLine("삭제 예.. 2024. 5. 11.
Windows 11 추가 옵션 항상 표시 1. "cmd.exe" 관리자 모드로 실행 2. 명령어 입력 reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve 3. 컴퓨터 재실행 2024. 1. 10.
WPF 종료 모드 WPF application 이 종료되는 속성을 지정할 수 있다. App.xaml Startup="Application_Startup" 프로그램은 Shutdown 메서드 호출에 의해서만 실행이 중지됩니다. Shut down 은 ShutdownMode 속성의 지정값에 따라 암시적 또는 명시적으로 발생한다. 1. OnLastWindowClose 기본값 마지막 창을 닫거나 Shutdown()을 호출하면 애플리케이션이 종료된다. 2. OnMainWindowClose 메인 창을 닫거나 Shutdown()을 호출하면 애플리케이션이 종료된다. 3. OnExplicitShutdown Shutdown()을 호출하면 애플리케이션이 종료된다. 2024. 1. 9.
명령줄 인수 1. 프로젝트 속성 설정 WPF 프로그램 시작시 명령줄 인수 전달 프로젝트 속성 - 디버그 - 일반 - 디버그 시작 프로필 UI 열기 - 명령줄 인수 2. Source code 에서 argument 확인 string[] args = Environment.GetCommandLineArgs(); // args[0] 2023. 12. 23.
WPF ListBox drag selection 보호되어 있는 글 입니다. 2023. 11. 6.
CS0649 warning CS0649: xxx 필드에는 할당되지 않으므로 항상 기본값을 사용합니다. public struct COPYDATASTRUCT { public IntPtr pData; public int dataLength; [MarshalAs(UnmanagedType.LPStr)] public string data; } 언어 버전을 변경하지 않고 메시지만 출력되지 않도록 하기 위해 해당 필드를 #pragma 구문으로 감싼다. public struct COPYDATASTRUCT { #pragma warning disable 0649 public IntPtr pData; public int dataLength; [MarshalAs(UnmanagedType.LPStr)] public string data; #.. 2023. 9. 20.
Windows git update 깃 버전 확인 git --version 깃 업데이트 git update-git-for-windows 2023. 9. 16.
volatile 최적화 캐싱(CPU 가 메모리에서 변수를 읽어서 레지스트리에 저장)된 변수에 대해서는 CPU 가 메모리 접근(Read)을 하지 않도록 한다. 이는 멀티태스킹 환경에서 의도하지 않은 상황을 발생시킨다. A 스레드에 캐시된 변수가 있는 상황에서 B 스레드가 해당 변수를 변경(Write) 할때 A 가 캐시된 변수의 값을 사용하면 오류 발생 A 가 정확한 값을 메모리에서 다시 읽어오는 과정이 필요하다. volatile 로 지정된 변수는 최적화를 수행하지 않는다. 필드 변수에만 적용 가능 지역 변수는 volatile 선언 불가 일부 항목에 대해서는 atomic 한 연산(read-modify-write)을 수행하지만, 모두 지원되지는 않음(다중 스레드 안전성은 Interlocked, lock 등을 사용해야 함) 2023. 9. 8.
Singleton Pattern Head First Design Pattern 개정판 싱글톤 패턴 내용을 C# Console 프로젝트로 구현 고전적인 싱글턴 패턴 구현 멀티 스레드 환경에서 유일한 인스턴스 생성이 보장되지 못함 namespace SingletonPattern { public class ChocolateBoiler { private static ChocolateBoiler _instance = null; public static ChocolateBoiler Instance { get { if (_instance == null) { _instance = new ChocolateBoiler(); } return _instance; } } private ChocolateBoiler() { } } } 스레드 안전한 싱글톤(정적 .. 2023. 9. 8.
디자인 원칙 Head First Design Pattern 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다. 구현보다는 인터페이스에 맞춰서 프로그래밍한다. 상속보다는 구성(composition)을 활용한다. 상호작용하는 객체 사이에는 가능하면 느슨한 결합을 사용해야 한다. 2023. 8. 27.
Observer Pattern Head First Design Pattern 개정판 옵저버 패턴 내용을 C# Console 프로젝트로 구현 ISubject.cs using System; namespace ObserverPattern { public interface ISubject { void RegisterObserver(IObserver o); void RemoveObserver(IObserver o); void NotifyObservers(); } } IObserver.cs namespace ObserverPattern { public interface IObserver { void Update(); } } IDisplayElement.cs namespace ObserverPattern { public interface IDis.. 2023. 8. 27.
Strategy Pattern Head First Design Pattern 개정판 전략 패턴 내용을 C# Console 프로젝트로 구현 Program.cs using System; namespace StrategyPattern { internal class Program { static void ShowStrategyPattern() { Console.WriteLine("[ Strategy Pattern ]"); Console.WriteLine("객체의 행동을 쉽게 확장하거나, 변경할 수 있는 클래스들의 집합으로 캡슐화하는 방식"); Console.WriteLine("알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해 줍니다."); Console.WriteLine("전략 패턴을 사용하면 클라이언트로부터 알고.. 2023. 8. 24.
Hard Disk's Serial Number With Command Prompt 1. "cmd.exe" 실행 2. 아래 명령 입력 wmic diskdrive get model,serialnumber 2023. 7. 19.
CString to char array ● MFC CString to char array CString cs = _T("ABCDE"); CStringA csa(cs); int buff_size = csa.GetLength() + 1; char* buff = new char[buff_size]; memcpy(buff, csa.GetBuffer(), csa.GetLength()); buff[buff_size - 1] = 0x0D; delete[] buff; 2023. 7. 18.
Virtual Serial Ports Emulator ● 가상 포트 생성 Create New Device ... Device type : Pair 선택 ● 가상 포트 선택 ● 생성 결과 확인 2023. 7. 17.