블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

최근에 올라온 글

string을 여러번 반복적으로 합치는건 속도가 느리다고하여, 많은 반복적인 작업에는 StringBuilder를 사용합니다.
차이점은 StringBuilder은 내부적으로 많은 메모리를 할당했다가, 사용하고,
string은 그때 그때 메모리를 계속 확장하는듯 합니다.

	static public string ListViewItem_ToLine(ListViewItem item, string spilt = "\t")
	{
		string s;
		var builder = new StringBuilder();
		int c;
		for (c = 0; c < item.SubItems.Count; c++)
		{
			s = item.SubItems[c].Text.Replace("\r\n", "");
			s = s.Replace("\n", "");

			builder.Append(s+ spilt);
		}
		return builder.ToString();
	}
    
    
	static public void ListView_CopySelectedToClipboard(ListView list)
	{
		var builder = new StringBuilder();
		foreach (ListViewItem item in list.SelectedItems)
		{
			builder.AppendLine(ListViewItem_ToLine(item));
		}
		Clipboard.SetText(builder.ToString());
	}
Posted by 안녕1999
, |
또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 지정된 파일을 찾을 수 없습니다.'

여러개의 Class로된 라이브러리들을 DLL로 만들었는데, 그중에 Excel관련 클래스만 실행시 에러가 발생한다.
참조에서 엑셀관련 내용을 삭제하고, DLL을 다시 참조 추가하니, 정상동작한다.

메인프로그램을 디버깅하면서, DLL의 소스코드까지 보고, 편집이 가능했다.(DLL 소스 수정후 DLL 다시 빌드 필요)


LIB를 DLL로 꺼내니, 엑셀관련 DLL이 2개가 더 생긴다.(LIB.DLL 만들때 생성됨)

exe파일 빌드하면, 참조된 DLL과 관련된 파일들을 모두 exe폴더에 복사가 된다.
DLL파일을 공유하는것으로 어려울듯하다.(폴더마다 각각 있어야할듯)
Posted by 안녕1999
, |

ListView를 tab문자열로 변환

C# / 2020. 10. 24. 23:50
	static public string ListView_GetLine(ListView list, int i,string spilt="\t")
	{
		var builder = new StringBuilder();
		int c;
		for(c=0;c< list.Columns.Count;c++)
		{
			builder.AppendLine(list.Items[i].Text+ spilt);
		}
		return builder.ToString();
	}
	static public string ListViewItem_ToLine(ListViewItem item, string spilt = "\t")
	{
		string s;
		var builder = new StringBuilder();
		int c;
		for (c = 0; c < item.SubItems.Count; c++)
		{
			s = item.SubItems[c].Text.Replace("\r\n", "");
			s = s.Replace("\n", "");

			builder.Append(s+ spilt);
		}
		return builder.ToString();
	}
	static public void ListView_CopySelectedToClipboard(ListView list)
	{
		var builder = new StringBuilder();
		foreach (ListViewItem item in list.SelectedItems)
		{
			builder.AppendLine(ListViewItem_ToLine(item));
		}
		Clipboard.SetText(builder.ToString());
	}
	static public string SpiltLine(ref string str,char spilt_char='\n')
	{
		int len;
		string s;
		len = str.IndexOf(spilt_char);
		if (len > 0)
		{
			s = str.Substring(0, len);
			str = str.Substring(len + 1, str.Length - len-1);
		}
		else
		{
			s = str;
			str = "";
		}
		s=s.Replace("\r", "");
		return s;
	}
Posted by 안녕1999
, |
예외 발생: 'System.IO.IOException'(System.dll)

원인 : SerialPort를 사용하다가, 뽑아 놓았더니, 사용가능한 포트인지 체크할때마다 위의 메세지가 나옴


	bool SerialPort_Open(SerialPort p)
	{
		bool ret = false;
		try
		{
			string[] sa = SerialPort.GetPortNames();
			if (sa.Length > 0)
			{
				if (sa.Any(x => x == p.PortName))
				{
					p.Open();
					ret = p.IsOpen;
					if (ret)
					{
						OnOpen(p);
					}
					else { }
				}
			}
		}
		catch { }
		return ret;
	}
Posted by 안녕1999
, |
Form속성에서 KeyPreview=True


		private void Form1_KeyDown(object sender, KeyEventArgs e)//KeyPreview=True
		{
			switch (e.KeyCode)
			{
				case Keys.F2:
					...
					e.Handled = true;
					break;
				case Keys.F3:
					...
					break;
				case Keys.F4:
					...
					break;
				default:
					break;
			}
		}
Posted by 안녕1999
, |
c#은 아주 느리다.
실행시간에 HEX문자열을 BIN으로 변환하는 과정은 아주 아주 아주 느리다.
그래서, 처음에 한번 변환하고, 전송시에는 변환된 BIN데이터만 전송한다.
ex)
		HexStrToBin_class data1 = new HexStrToBin_class("22 00 02 00 04"),
			data2 = new HexStrToBin_class("80 20 00 04 00 00"),
			data3= new HexStrToBin_class("30 80 20 00 00 00 CD");
		void some_func()
		{
			WRITE232("data1", data1.buf, data1.len);
			WRITE232("data2", data2.buf, data2.len);
			WRITE232("data3", data3.buf, data3.len);
		}




public class HexStrToBin_class
{
	public string HexStr;
	public byte[] buf;
	public int len;
	public HexStrToBin_class(string hex_str)
	{
		byte[] a=new byte[1024*8];
		HexStr = hex_str;
		len =G.HEX_str_to_Bin(hex_str, ref a);
		buf = G.Memdup(ref a, len);
	}
}

static public class G
{
	static public void Memcpy(ref byte[] dst,ref byte[] src,int len)
	{
		Buffer.BlockCopy(src, 0, dst, 0, len);
	}
	static public byte[] Memdup(ref byte[] data, int len)
	{
		byte[] ret = new byte[len];
		G.Memcpy(ref ret, ref data, len);
		return ret;
	}
    static public byte Hex2Binary(char a)
	{
		byte ret = 0;
		if (('0'<=a)&& (a<='9'))
		{
			ret = (byte)(a - '0');
		}
		else if(('A'<=a)&&(a<='Z'))
		{
			ret = (byte)(a - 'A'+10);
		}
		else if (('a' <= a) && (a <= 'z'))
		{
			ret = (byte)(a - 'a' + 10);
		}
		else
		{
			//err
		}
		return ret;
	}
    static public int HEX_str_to_Bin(string s, ref byte[] buf)//3자리이상의 홀수 자릿수의 연속하는 HEX문자열이 없어야한다.
	{
		int len = 0;
		int i, n, cnt = 0;
		char a;
		byte c = 0;

		i = 0;
		n = s.Length;
		while (i < n)
		{
			a = s[i];
			if (a == ';')
			{
				//주석문
				break;
			}
			else if ((a == ' ') || (a == '\t') || (a == '\r') || (a == '\n'))
			{
				//skip
				//reset
				cnt = 0;
				c = 0;
			}
			else
			{
				//1byte HEX문자(최대 2문자)를 바이너리로 변환
				c = (byte)((c << 4) | Hex2Binary(a));
				cnt++;
				if (cnt >= 2)
				{
					buf[len] = c;
					len++;
					//reset
					cnt = 0;
					c = 0;
				}
				else
				{

				}
			}
			i++;
		}
		if (cnt > 0)
		{
			buf[len] = c;
			len++;
		}
		else
		{
		}
		return len;
	}
}
Posted by 안녕1999
, |

C언어의 atoi함수 구현

C# / 2020. 10. 17. 23:36
	//숫자+문자인 문자열을 Convert로 변환하면 0만 나옴.
    //C언어의 atoi함수 구현
	static public int Atoi(string s)
	{
		int ret = 0, si=1,i;
		s = s.Trim();
		if (s[0] == '-')
		{
			si = -1;
		}
		else if (s[0] == '+')
		{
			//si = +1;
		}
		else 
		{
			for (i = 0; i < s.Length; i++)
			{
				if (('0' <= s[i]) && (s[i] <= '9'))
				{
					ret = ret * 10 + (s[i] - '0');
				}
				else
				{
					break;
				}
			}
		}
		return ret * si;
	}
Posted by 안녕1999
, |
byte byteValue=0xA;
byteValue.ToString("D3") => "010"
byteValue.ToString("X2") => "0A"

날짜,시간 문자열 만들때 사용.
예) 2020.09.08





byte byteValue = 254;
short shortValue = 10342;
int intValue = 1023983;
long lngValue = 6985321;
ulong ulngValue = UInt64.MaxValue;

// Display integer values by calling the ToString method.
Console.WriteLine("{0,22} {1,22}", byteValue.ToString("D8"), byteValue.ToString("X8"));
Console.WriteLine("{0,22} {1,22}", shortValue.ToString("D8"), shortValue.ToString("X8"));
Console.WriteLine("{0,22} {1,22}", intValue.ToString("D8"), intValue.ToString("X8"));
Console.WriteLine("{0,22} {1,22}", lngValue.ToString("D8"), lngValue.ToString("X8"));
Console.WriteLine("{0,22} {1,22}", ulngValue.ToString("D8"), ulngValue.ToString("X8"));
Console.WriteLine();

// Display the same integer values by using composite formatting.
Console.WriteLine("{0,22:D8} {0,22:X8}", byteValue);
Console.WriteLine("{0,22:D8} {0,22:X8}", shortValue);
Console.WriteLine("{0,22:D8} {0,22:X8}", intValue);
Console.WriteLine("{0,22:D8} {0,22:X8}", lngValue);
Console.WriteLine("{0,22:D8} {0,22:X8}", ulngValue);
// The example displays the following output:
//                     00000254               000000FE
//                     00010342               00002866
//                     01023983               000F9FEF
//                     06985321               006A9669
//         18446744073709551615       FFFFFFFFFFFFFFFF
//
//                     00000254               000000FE
//                     00010342               00002866
//                     01023983               000F9FEF
//                     06985321               006A9669
//         18446744073709551615       FFFFFFFFFFFFFFFF
//         18446744073709551615       FFFFFFFFFFFFFFFF
Posted by 안녕1999
, |
String이나 string이나 큰 차이는 없다.

StringBuilder는 왜/언제 사용할까?
=>for루프문등에서 문자열을 반복적으로 합치는 경우에, string은 메모리 할당해제가 빈번하여, 느려지고,
문자열의 길이가 길어질 수 록 점점 느려진다.
이때, StringBuilder를 사용하면, 좀더 빠른 문자열 합치기를 할 수 있다.
Posted by 안녕1999
, |

out ref 차이

C# / 2020. 10. 17. 23:22
C언어의 포인터 개념에 가까운것은 ref이다.
함수에 인자를 전달할때, ref로 전달하면, 입력, 출력 모두 가능하다.
함수에 여러개의 출력값이 필요하다면 out이나 ref를 사용한다.
예) 함수는 한개인데, 출력값을 3개를 얻어야하는 경우 ref나 out사용

out도 ref와 비슷하지만, 입력용도가 아닌 출력용도이다.

코딩할때 ref는 초기값을 넣어주어야한다.
반대로 out은 함수 내부에서 값을 넣어주어야한다.
out은 함수호출하기전에 초기값을 안넣어주어도 된다.

요약 : 비슷하나, 사용방식이 약간 다름.
Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함