본문 바로가기

C#

(14)
구조체 -> 바이트 배열, 바이트 배열 -> 구조체 통신 프로그램을 만들 때 프로토콜을 구조체로 잡고 바이트 배열로 쏘는 경우가 생기는데 아래와 같이 하면 된다. // 구조체를 바이트 배열로 변환 public static int CvtStructToBin(object obj, out byte[] bin) { bin = new byte[Marshal.SizeOf(obj)]; unsafe { fixed (byte* fixed_buffer = bin) { Marshal.StructureToPtr(obj, (IntPtr)fixed_buffer, false); } } return bin.Length; } // 바이트 배열을 구조체로 변환 public static int CvtBinToStruct(byte[] bin, object obj) { unsafe { fix..
C#에서 로그 함수 만들기 C나 C++에서 콘솔이나 UI의 디버깅창에 로그를 남기면서 파일로도 로그를 남기는 작업을 했었다. 주로 서버 개발이나 펌웨어 개발할 때 썼었는데 이번 프로젝트는 c#을 사용해야 하기에 맘먹고 만들어봤다. 소스코드는 아래에 있고 로그 발생지(eBlk)나 로깅 수준(eLevel)은 입맛대로 바꿔서 쓰면 될듯... 보통 릴리즈 후에는 어느정도 버그를 잡았다고 보기 때문에 ERROR, ABNORMAL, ESSENTIAL 정도만 남겨두고 나머지 로깅 수준은 꺼두는 것이 좋다. 이러한 로깅 수준 조정은 설정 파일을 따로 두어서 설정 내용에 따라 조정하면 되겠다. 아래 소스에서는 일단 모두 보이게 하는 것으로 해두었다. public enum eBlk { BLK_GATE = 0, BLK_MNGR, BLK_MAIN, B..
windows programming 어느 환경에서 개발해야하나 최근 고민이 하나 생겼다. 회사에서 기본적으로 VS6.0에서 MFC로 Windows programming을 하는데 언젠가는 갈아타야하지 않나는 생각이 들었다. 최근 프로젝트에서 asp .net 2.0 with c# 환경에서 돌아가는 웹어플을 하나 만들었는데 이 때 사용한 툴은 vs2005이다. 유저의 요구사항의 추세가 인스톨 형태로 프로그램을 깔기는 싫어하고 기존의 리치 클라이언트 수준의 프로그램을 요구하는데 이를 만족할만한 솔루션이 마땅치가 않다. Smart Client도 있고 ActiveX도 있고 여러가지 방법이 있겠지만 호환이니. 망해가는 솔루션이니 해서 손대기도 두렵고... 유저마다 웹에서 되게 해달라 그냥 어플로 되게 해달라 요구사항도 계속 바뀔지도 모르고.. 결국 Windows Programm..
동적으로 생성한 Table Control의 State 저장하고 불러오기 요구사항 : 동적으로 구성한 Table Control의 상태를 유지 배경 : Database에서 특정 데이터를 가져와 가공한 뒤 사용자의 입맛에 맞게 테이블로 그 결과를 구성하였다. 하지만 다른 컨트롤을 조작하여 PostBack이 일어난다면 이전에 바운딩한 테이블 정보들이 모두 초기화 된다. 따라서 PostBack이 일어나도 이전 단계의 테이블 상태를 유지하는 것이 필요하였다. 조건 : 테이블 내용이 바뀔 필요가 없는 경우 PostBack이 일어난 뒤 DB 접근은 하지 않는다. 예제 코드 Table Table_Work_History; protected void Page_Load(object sender, EventArgs e) { if(Page.IsPostBack){ if(Session["Table"] ..
String.Format 할 때 자리수 맞추기 단순 예제 int aa = 3; str = String.Format("{0:000}", aa); 결과 : 003 UInt32 aa = 10; string s = String.Format("{0:X3}", aa); 결과 00A UInt32 aa = 10; string s = String.Format("{0:x3}", aa); 결과 00a
c#에서 String.Format 형식 타입 지정하기 MSDN을 검색하다 굉장히 유용(?) 할것 같은 예제가 있길래 퍼왔다. 출저는 발켰으니 괜찮겠지.. 친절하게 MSDN에 소스 복사하기까지 있으니까 ㅡㅡ; // This code example demonstrates the String.Format() method. // Formatting for this example uses the "en-US" culture. using System; class Sample { enum Color {Yellow = 1, Blue, Green}; static DateTime thisDate = DateTime.Now; public static void Main() { // Store the output of the String.Format method in a stri..
char[ ] -> string, string -> char[ ] 아래와 같이 char배열에서 string으로 string에서 char로 형변환 할 수 있다. 보너스는 char 배열 넘기기~ (복사해서 넘긴다. 주소를 넘기려면 ref를 사용) string str = "12345"; char[] temp_str; temp_str = str.ToCharArray(); // string -> char [] Rcv_Char_arr(temp_str); protected void Rcv_Char_arr(char[] arr) { string str = new string(arr); // char[] -> string }
마우스 클릭 이벤트를 통해 동적으로 이미지 변경 목표 특정 이미지를 클릭하면 다른 이미지로 변경되고 다시 클릭하면 원래 이미지로 돌아오는 토글 형식의 이벤트를 구현, 단 해당 컨트롤은 서버쪽에서도 접근 가능해야 함 준비 이미지 컨트롤은 asp .net의 이미지 컨트롤을 사용하지 않고 html 컨트롤을 사용한다. 적당한 위치에 이미니 컨트롤을 추가 초기 이미지는 img 폴더의 small-sphere-green.bmp 로 설정하였다. 구현 함수를 호출하는 곳에서 해당 이미지의 이름을 함께 넘겨준다. 함수 구현부에서는 컨트롤 이름을 통해 이미지의 url을 알아내고 해당 url을 비교하여 토글링에 이용한다. 주의 : 이미지 src에는 full url이 들어가 있다 따라서 이미지 파일 이름만 얻어오기 위해 몇가지 string 관련 함수를 이용하였다. funct..