본문 바로가기

개발 이야기163

C# RDotNet 샘플프로젝트 소스코드 안녕하세요 마블랑입니다. 이전에 C# 과 R 의 연동인 RDotNet에 관련된 포스팅에서 사용했었던 샘플 예제 코드입니다. 잘 활용하시기 바랍니다! 이상 마블랑이었습니다. 읽어주어서 고맙습니다. 2020. 5. 31.
C# .Net 시리얼 통신 구현 안녕하세요 마블랑입니다. 윈도우에서 응용프로그램을 개발할때 하나의 프로그램을 만들수도 있지만 장비를 제어하는 프로세스를 만들수도 있습니다. 개인적으로 장비를 제어할때 실제 제어가 되는 것을 보니 장비제어 프로세스를 구현하는것이 더 재미있게 느껴지는데요 윈도우 프로세스에서 장비를 제어하는 방법은 간단히 말하면 주로 소켓통신을 이용하거나 시리얼 통신을 이용하면 되는데요 C#에서는 시리얼통신을 할때 기본 클래스를 제공하기 때문에 아주 쉽게 구현할수 있습니다. 먼저 장비와 시리얼 포트를 연결하고 데이터를 보내는 부분을 구현해 보겠습니다. SerialPort serial = new SerialPort("포트넘버"); //포트넘버, 보드레이트, 시작비트 등 설정할수 있습니다. //보드레이트 등을 설정할수 있습니다... 2020. 5. 29.
C# .Net 프로젝트 빌드시 실행파일명 변경 안녕하세요 마블랑입니다. 보통 비주얼스튜디오에서 C# 프로젝트를 생성하고 빌드를 할경우에는 프로젝트명으로 실행파일이 출력됩니다. 근데 처음 프로젝트를 생성할때와 다르게 실행파일명을 변경해줘야 할때가 있는데요 그럴 경우를 대비해서 프로젝트 빌드 후에 생성되는 실행파일명을 변경하는 방법에 대해서 알아보려고 합니다. 샘플을 보면서 설명을 하겠습니다. 샘플용으로 "BuildTester" 라는 프로젝트를 만들었습니다. 우선 빌드를 해보겠습니다. 그뒤에 실행파일이 생성된 폴더로 가보면 실행파일명도 프로젝트명과 동일하게 "BuildTester" 인것을 확인할수 있습니다. 그럼 이제 빌드 후에 생성되는 실행파일의 명을 변경해주도록 하겠습니다. 아래 빨간 박스로 표시된 프로젝트 속성파일을 열어주세요 가장 맨 위에 있는 .. 2020. 5. 26.
C# .Net 통신용 구조체, 마샬링 안녕하세요 마블랑입니다. 같은 언어와 같은 플랫폼에서의 통신을 주고 받을때 크게 문제가 되지 않을듯합니다. 하지만 다른 플랫폼과 다른 프로그래밍 언어를 사용할때는 데이터를 맞게 보낸다고 해도 이것저것 고려해야할것이 많죠 .. 예를 들어 빅엔디안, 리틀엔디안이 있는데요 그외에도 통신을 주고 받을때 패킷을 구조체로 변경하는 경우가 많습니다. 또는 구조체를 패킷으로 바꿔야할때도 있죠 그렇지만 컴퓨터나 시스템에서 패킷처리하는 데이터의 단위가 달라 바이트 패킷이 구조체로 잘못변환될수도 있더군요. 그것을 방지하기 위해서 구조체에 선언된 변수의 길이만큼 구조체의 길이도 변경해줘야 하는데요. C#에서는 마샬링을 통해서 구조체의 길이를 통신 패킷에 맞춰 변경할수 있습니다. 아래 그림과 같이 구조체 위에 Pack을 1로 .. 2020. 5. 22.
윈도우10 폰트 추가 안녕하세요 마블랑입니다. 이번 포스팅은 윈도우10에 있는 기본적인 폰트말고 다운로드받은 폰트를 추가하고 사용하는 방법에 대해서 알아보겠습니다~ 일단 무료폰트를 다운받아야합니다~ 인터넷 포털사이트 다음, 네이버, 구글 같은 사이트에 무료 폰트를 검색해서 무료폰트를 제공하는 사이트에 접속하여 폰트를 다운받아주세요~ 마블랑은 테스트용 폰트로 국대떡볶이라는 폰트를 받았습니다~ 무료로 사용할수 있는 폰트들이 있지만 간혹 저작권이 있어 돈을 지불해야 사용할수 있는 폰트가 있으니 참고하시기 바랍니다~ 그럼 윈도우10에 폰트를 추가해보겠습니다. 정말 간단합니다. 폰트파일에 우클릭을 하여 빨간 박스로 표시된 부분인 '설치'를 클릭하기만 하면 폰트가 자동으로 설치가 됩니다~ 폰트가 사용자마다 권한이 있어보입니다. 모든 사.. 2020. 4. 22.
C# .Net Image.Stretch 속성 안녕하세요 마블랑입니다. C# 에서 이미지 컨트롤을 사용할때 이미지 컨트롤에 따라 표시되는 이미지의 크기를 조절할수 있습니다. Image에 Stretch 속성을 이용하면 되는데요 표현해주고싶은대로 Stretch를 설정하여 조정할수 있습니다. 그럼 어떤 속성이 있는지 살펴보기 전에 코드를 먼저 살펴보며 Stretch속성을 어떻게 설정하나 보겠습니다. 아래 코드는 xaml 코드에서 Stretch 속성을 설정하였지만 C# 코드에서도 Stretch속성을 조정할수있습니다~ Stretch 속성은 이미지 컨트롤의 속성창에서 설정을 하면 xmal 코드에 자동으로 추가됩니다. 속성의 검색창에 Stretch를 검색해주세요 위 코드를 보면 이미지 컨트롤 Image_01은 Stretch 속성이 기본값인 'Uniform'으로 .. 2020. 4. 18.
C# .Net 문자열 공백 제거 안녕하세요 마블랑입니다. 얼마전에 프로젝트를 진행하면서 byte 배열을 문자열로 컨버팅을 할때 문제가 발생을 하더군요 여유롭게 사이즈를 잡아놓은 바이트 배열에서 문자 '\0'을 공백으로 문자열로 컨버팅을 해버리니 문자열 길이를 출력해보니 공백까지도 포함해서 길이가 출력이 되더군요.. (무슨이유인지를 몰랐습니다.) string.trim이나 string.replace를 사용해 보아도 제거가 되지 않아서 여러가지 방법을 찾아보니 아래같이 코딩을 하니 해결이 되었습니다. Encoding.ASCII.GetString(array).TrimEnd('\0'); Trim은 Trim인데 TrimEnd를 사용하니 되더군요. 문자열로 컨버팅을 한뒤 텍스트 박스에 많은 데이터를 출력을 했는데 해당 문자열만 공백이 길어져서 건너.. 2020. 4. 12.
C# .Net WPF Textbox Enter키 입력 및 자동 줄바꿈 안녕하세요 마블랑입니다. C# WPF 에서 사용자의 텍스트를 입력받을수 있는 Textbox(텍스트박스) 컨트롤 기본적인 기능이야 .Net에서 잘 구현되어 있지만 가끔 특수한 기능을 구현해서 사용해야 될때가 있는데요 그 Textbox(텍스트박스) 관련해서 기본 컨트롤에 몇가지 특수한 기능을 추가해보려고 합니다. 바로 엔터키를 입력해서 여러줄을 입력 받을수 있게 하는 기능과 한 라인의 글자수를 제한해서 자동으로 다음 줄에 텍스트가 써지게 하는 기능입니다~ 아래화면처럼 최대길이 10자리를 넘어가면 자동으로 아래줄에 쓰여집니다. 그리고 Enter(엔터)키를 사용해서 최대 길이가 넘지 않아도 아래 줄로 내려갈수 있도록 기능을 추가해두었습니다~ 1. 자동줄바꿈 자동 줄바꿈 기능은 .Net(닷넷)에서 따로 제공하는것.. 2020. 3. 28.
c# .Net 할당되지 않은 지역 변수를 사용했습니다. 안녕하세요 마블랑입니다. C#으로 프로그래밍을 할때 예기치 못한 에러 때문에 개발이 막힐때가 종종 있습니다. 그런데 그 에러는 정말 간단한 부분에서 발생하는 경우가 대다수인데요 그중 하나인 "할당되지 않은 지역 변수를 사용했습니다."라는 에러 메시지에 대해서 해결 방법을 알아보겠습니다~ 아래 코드는 간단하게 정수형 변수에 따라 출력 메시지가 달라지는 기능을 구현한것 입니다. 코드는 간단하지만 컴파일을 하려고보니 에러가 표시되며 컴파일이 되지 않는군요. 에러 메시지는 "할당되지 않은 '(변수명)' 지역 변수를 사용했습니다."로 표시가 되는군요.. 이렇게 에러가 발생하는 경우는 string 변수를 선언하고서 초기화를 해주지 않아서 그런데요 string 뿐만아니라 다른 데이터 타입은 물론 클래스 까지도 선언하.. 2020. 3. 25.
비주얼스튜디오 코드 설치, 한글화, 한글 인코딩, 라이센스 안녕하세요 마블랑입니다. 가끔 배우지 않은 프로그래밍 언어를 분석할때 툴이 없어 메모장이나 워드패드로 분석을 해야할때가 있습니다. 울트라 에디트나 다른 에디트를 이용해도 되지만 경험상 사용해보고 괜찮았던 텍스트 툴인 VisualStudio Code (비주얼스튜디오 코드)를 추천하려고 합니다~ 그럼 비주얼 스튜디오를 설치하고 한글화 하는 방법에 대해서 알아보겠습니다~ 먼저 설치파일을 다운 받아봅시다. 구글에서 검색을 하면 바로 다운받을수 있는 페이지가 표시됩니다. 파란색 버튼으로 표시된 다운로드 버튼을 누르면 자동으로 다운받아집니다~ 다운받은 설치파일을 실행하여 설치를 진행합니다~ 설치가 완료되고 실행을 해보니 메뉴가 영어로 되어있습니다~ 영어를 잘하면 몰라도 영어 공포증이 있다면 여간 불편하지 않을수 없.. 2020. 3. 23.
C# .Net Array.Copy() 바이트 복사 안녕하세요 마블랑입니다. 윈도우에서 소켓통신이나 시리얼 통신 등 통신 프로그램을 만들때 보통 바이트 단위로 데이터를 주고 받습니다. 그래서 바이트 단위로 데이터를 잘 다룬다면 어렵게 느껴지는 통신프로그램이 쉽게 느껴질것입니다. 바이트 배열로 데이터를 받으면 보통 이 데이터는 여러가지 데이터가 담겨져 있습니다. 그래서 바이트 배열을 정해진 길이만큼 잘라서 써야 하는데요 C#에서는 Array 클래스를 이용하면 바이트를 필요한만큼 잘라서 쓰는것이 굉장히 쉽습니다~ 배열을 잘라쓰기 위해 사용해야하는 함수 말고도 Array클래스의 유용한 함수도 알아보겠습니다~ (아래 예제 코드에 포함된 함수들입니다~) 1. Array.Copy(byte[] source, int sourceIndex, byte[] destinati.. 2020. 3. 23.
삼항 연산자 사용하기 안녕하세요 마블랑입니다. 프로그래밍 언어에서 조건문이 없으면 구현할수 있는 기능의 범위가 현저히 줄어듭니다. 그만큼 프로그밍 언어에서 조건문은 중요한 한 축을 담당하고 있는데요 종료할때 물어보는 메시지만 봐도 조건문을 잘 활용하면 더 퀄리티 있는 프로그램을 개발할수 있습니다~ 조건문은 if else 구문을 이용해서 구현할수 있습니다. 조건을 검사한 뒤 작업을 수행할때 구문이 길면 { ... } 로 감싸 작업을 추가할수 있습니다. 이렇게 긴 구문은 if else 구문을 이용해서 조건문을 구현할수 있지만 수행해야할 구문이 길지 않을 경우 "삼항 연산자"를 통해서도 조건문을 구현할수 있습니다. 실제로 마블랑도 코드가 길어지는 것을 싫어하여 삼항 연산자를 자주 사용하곤 합니다. 그럼 삼항 연산자에 대해서 알아보.. 2020. 3. 16.
C# .Net WPF 의존프로퍼티(DP) 안녕하세요 마블랑입니다. C#에서 Winform을 주로 사용하다 요새 들어 WPF를 배워보았습니다. 그동안 Winform(윈폼)을 통해 윈도우의 GUI프로그래밍이 쉽다고 느꼈었는데 WPF는 그것보다 조금 더 어려운 감이 있군요. Winform(윈폼)과 WPF의 차이점은 여러가지 있겠지만 프로세스나 자원을 건너뛰고 외적인 것만 본다면 화면 디자인을 더 다양하게 구현할수 있는 것이 장점이라고 생각합니다. 생각보다 배워야하는 WPF의 기능이 많아 완벽히 이해하고 사용하는데 시간이 오래 걸리겠지만 조금씩 배우면서 포스팅을 작성하려고 합니다. 아직 WPF를 배우고 있어 정확히 설명을 하기는 어렵지만 배우는 시각에서의 C# WPF를 설명하여 이해하기 쉽게 도우려고 합니다. 이번 포스팅에는 WPF의 기능중 하나인 D.. 2020. 3. 16.
C++ MFC CString to BYTE Array, BYTE Array to CString Casting 안녕하세요 마블랑입니다. 비주얼 스튜디오를 이용해 C++이나 MFC 프로그램을 개발할때 문자열을 바이트 배열로, 바이트 배열을 문자열로 컨버팅 해야하는 경우가 있습니다. 이번 포스팅은 간단하고 두 데이터 타입간의 형변환에 대해서 알아보겠습니다. 1. CString to BYTE Array BYTE byte[1024]; CString strTemp("TestMessage"); memcpy(byte, (VOID*)LPCTSTR(strTemp), str.GetLength()); 2. BYTE Array to CString CString strTemp; BYTE arrByte[1024]; strTemp.Format("%s", arrByte );//BYTE array to CString 또는 아래와 같이 문자열을.. 2020. 3. 14.
C# .Net 문자열 나누기 Split 안녕하세요 마블랑입니다. 이번 포스팅은 간단하게 C#, .Net에서 문자열을 특정문자로 나누는 방법에 대해서 소개하겠습니다. 먼저 예제 코드를 보겠습니다. string strMsg = "1/2/3/4/5/6/7/8/9/0/a";//예제 문자열 string[] strTemp = strMsg.Split('/'); //문자열 '/' 으로 나누기 //문자열 나누기 출력 string strOutput = ""; foreach (string temp in strTemp) { strOutput += temp + "\n"; } MessageBox.Show(strOutput); 출력결과 : C# .Net 에서 문자열을 나눌때 String.Split() 함수를 사용하면 됩니다~ 매개변수는 문자열이 아닌 문자만 넣을 수 있.. 2020. 3. 14.