개발언어/C#191 [c#] [StructLayout()]객체의 메모리 레이아웃에 대하여 클래스 혹은 구조체 객체의 크기는 일반적으로 필드 크기의 합보다 크게 표시되며, 객체의 필드들은 개발자가 정의한 순서대로 메모리 상에 위치하지 않는다. 이 노트는 이러한 현상의 이유와 해결법을 알아본다. 다음과 같은 구조체의 크기를 구해보자. struct MyStruct { public int i; // 4 public double d; // 8 public byte b; // 1 } 구조체의 크기는 각 필드 크기의 합이므로, 이론적으로 MyStruct 구조체의 크기는 4+8+1 = 13 이다. 크기를 구하기 위해 다음과 같이 Marshal.SizeOf()를 사용할 수 있다. int size = Marshal.SizeOf(typeof(MyStruct)); 하지만 실제 이 문장을 실행해 보면, size가 .. 2020. 11. 4. [C#] [Flag] Enum Attribute는 무엇을 의미합니까? 예시 [Flags] public enum Options { None = 0, Option1 = 1, Option2 = 2, Option3 = 4, Option4 = 8 } 그 [Flags] 속성은 열거형이 단일 값이 아닌 가능한 값의 집합을 나타낼 때마다 사용해야 합니다. 이러한 컬렉션은 비트 연산자와 함께 사용되는 경우가 많습니다. 예를 들어 다음과 같습니다. var allowedColors = MyColor.Red | MyColor.Green | MyColor.Blue; 참고 [Flags] 속성은 스스로 이것을 가능하게 하지 않는다 - 단지 그것에 의해 멋진 표현을 허용하는 것이다. .ToString() 메서드 enum Suits { Spades = 1, Clubs = 2, Diamonds = 4, .. 2020. 11. 4. [C#] C# 코딩 표준 출처 : https://docs.google.com/document/d/13N-08EAVkeKkhWVxyh6UMEzVL6KwwXLT4aPV4uoqvMw/edit# C# 코딩 표준 원문(영어): C# Coding Standards 머리말 기본 원칙 가독성을 최우선으로 삼는다. (대부분의 경우 코드는 그 자체가 문서의 역할을 해야 함) 정말 합당한 이유가 있지 않는 한, 통합개발환경(IDE)의 자동 서식을 따른다. (비주얼 스튜디오의 “Ctrl + K + D” 기능) 본 코딩표준을 따라 잘 짜여진 기존의 코드에서 배운다. 참조문서 이 코딩 표준은 아래의 코딩 표준들에서 영감을 얻었음. 언리얼 엔진 4 코딩 표준 둠 3 코드 스타일과 규칙 IDesign C# 코딩 표준 IDE 도우미 비주얼 스튜디오에 ... .. 2020. 11. 4. [C#] 고정크기배열 사용방법 #MarshalAs 앞서 포스팅한 자료와 마찬가지로 다음과같은 구조체를 만들어보면 public struct MyArray { public char[] charArray; public string str; } 크기는 8이 된다. fixed키워드를 사용하면 배열의 크기를 고정할 수 있지만, 안전하지 않은 코드(unsafe)영역으로 지정해야한다는 문제가 있다. MarshalAs키워드를 사용해 고정크기 배열 (혹은 고정크기 문자열)을 사용할 수 있다. [StructLayout(LayoutKind.Sequential)] public struct MyArray { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)] public char[] charArray; [MarshalAs(Unman.. 2020. 11. 3. [C#] x86/x64 환경에 따라 달라지는 P/Invoke 함수의 export 이름 다음의 글은, C# - x86 실행 환경에서 SECURITY_ATTRIBUTES 구조체를 CreateEvent에 전달할 때 예외 발생 ; http://www.sysnet.pe.kr/2/0/11130 사실, 제가 CreateEvent Win32 API를 P/Invoke 테스트하면서 첫 번째 인자를 실수로 포인터가 아닌 구조체 값을 그대로 전달해 발생한 문제입니다. 재미있는 것은, 저 글에 대한 재현 소스 코드를 작성하면서 희한한 현상으로 보이는 ^^; 문제를 접하게 되었는데 그에 대해 하나씩 풀어낸 과정을 기록해 보겠습니다. 현상을 설명하기 위해, 우선 C++로 다음의 소스 코드를 가진 Win32 DLL 프로젝트를 준비합니다. // Header 파일 #pragma pack( push, 1 ) struct .. 2020. 11. 3. [C#] WinAPI(Kernel32 dll) 사용하기 Kernel32.dll에서 GetSystemTime / SetSystemTime 호출해서 사용하기 C# / .NET 에서 Native DLL (Unmanaged DLL)에 있는 함수를 호출하는 P/Inovoke(Platform Invoke) 방식을 사용하여 C#에서 WinAPI를 호출하거나 C/C++로 작성된 Native DLL 함수를 호출한다. 1. DllImport 키워드를 사용해서 함수 호출하기 using System.Runtime.InteropServices; namespace TEST.APIs { public static class Kernel32 { [DllImport("kernel32.dll", SetLastError = true)] public static extern bool GetSys.. 2020. 11. 3. [C#] if ~else if를 한 줄로 '삼항 연산자' ■ 삼항 연산자 if ~else if 문을 한 줄로 표현합니다. 문법 ※ 취할 값은 변수, 숫자, 문자, 문자열 등 다양하게 사용할 수 있습니다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { int num1 = 10; int num2 = 20; void Start() { print(num1 == num2 ? "두 수가 같습니다." : "두 수가 다릅니다."); // 삼항연산자 } } 2020. 11. 3. [c#] [StructLayout(LayoutKind.Sequential)] Serializable : 문자로 변환하기 위해서 선언(? 알려주기정도..)해준다. 1. StructLayout(LayoutKind.Sequential) : 나 구조체야 라고 선언한다 (나 구조체야, 라는 표현보다는 마샬링 성능에 대한 부분이라 볼 수 있습니다. [StructLayout] 키워드를 빼더라도 구조체는 사용할 수 있습니다.) Sequential Layout은 Managed Memory에서 마샬링을 사용해 Unmanaged Memory로 옮길 때 각 필드의 순서가 Unmanaged Memory에서 유지되는 레이아웃이다. 위의 예제에서 MyStruct구조체는 [StructLayout(LayoutKind.Sequential)]을 사용하고 있는데, 이는 Managed 메모리 영역에서는 순서가 어떨지.. 2020. 11. 2. [C#] - internal 접근 한정자 intermal은 같은 어셈블리(DLL) 또는 exe 에서만 접근이 가능하도록 하는 한정자 입니다. 다른 어셈블리에서도 접근할 수 있도록 하려면 public을 사용합니다. [출처] C# - internal 접근 한정자|작성자 펭순이 2020. 11. 2. [C#] ref 키워드와 out 키워드의 차이 ref와 out 키워드는 인자로 넘긴 변수를 함수 내부에서 참조의 형태로 사용한다는 점에서 동일하다. 그러나 out 키워드는 ref보다 조금 더 특이한 상황에서 사용한다. ref와의 차이점부터 정리하자면 out은 초기화된 값이 인자로 들어오든 말든 상관이 없으나, ref는 초기화 된 값을 가지고 사용하는 데 초점이 맞춰져 있다. 그리고 out은 해당 메서드가 끝나기 전까지 내부에서 인자로 받은 변수에 어떤 값이든 할당해야 하나, ref는 해당 값을 메서드 내부에서 변경하든 말든 상관없다. 즉, ref는 레퍼런스이므로 값을 복사하지 않고 참조해서, 변수를 사용하거나 변경하는 것이 주 목적인 반면, out은 들어온 변수가 어떤 형태로 들어왔든 간에, 꼭 뭔가 값을 받아서 갖고 나가게 만들어야 한.. 2020. 11. 2. 이전 1 ··· 16 17 18 19 20 다음