전체 글326 [C#] C#과 C API의 상호운영 dll사용등 출처 : http://blog.daum.net/toyship/83 C# Interop – C#과 C API의 상호운영 Posted by rainiac on 2012/10/19Leave a comment (2)Go to comments C#은 매우 강력한 각종 기능과 Class를 제공하지만, Windows Application의 작성을 위해서는 C로 작성된 Library를 사용하여야 하는 경우가 많이 발생된다. C#은 기본적으로 C의 Pointer를 지원하지 않고, Managed Code의 메모리 관리 체계는 근본적으로 C(Unmanaged Code)와 차이가 많기 때문에 C와의 호환을 위해서는 특수한 기법을 사용하여야 가능하다. C#은 이를 위하여 PInvoke와 Marshaling 등의 기능을 제공한다.. 2020. 11. 4. [c#] [C++] --> [C#] 구조체, 클래스 컨버팅 c++ 서버, c# 클라 Unity 기준입니다. C++ #pragma once #pragma pack(push,1) // 1바이트 정렬 struct MyStruct { MyStruct() { m_AccountUniqueID = 0; m_CharacterUniqueID = 0; memset(m_sz, 0, sizeof(m_sz)); m_b = false; } char m_sz[128]; unsigned int m_un1; unsigned int m_un2; bool m_b; }; #pragma pack(pop) // 1바이트 정렬끝? 대충 이런 구조체가 있다 치면 C# 으로 컨버팅 할때 이것저것 많이 해야된다;;;;; C# using System; using System.Runtime.InteropServ.. 2020. 11. 4. [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. 이전 1 ··· 29 30 31 32 33 다음