개발이 막바지에 오고 기능구현 단계가 지나가면 최적화 작업을 하게 됩니다. 이때 각 구간별로 시걸린 시간을 측정하는 것이 중요하죠. 이 걸린시간을 기반으로 어디를 어떻게 수정해야할지 계획을 잡을수 있으니까요. 이때 사용하는것이 디버깅 메시지와 틱(Tick)입니다. 틱은 자신의 컴퓨터에서 시간을 계산하는 최소 단위입니다. 보통 1틱은 100나노초( == 1/10000000 )입니다. 닷넷에서는 DateTime.Now.Ticks 이렇게 해서 가저 올수 있죠, (참고 : MSDN - DateTime.Ticks 속성) 디버깅 메시지는 일반적인 툴들에서 모두 지원하는 기능으로 개발툴의 콘솔화면(혹은 특정 화면)에 개발자가 심어놓은 메시지를 출력하는 기능입니다. 닷넷에서는 Debug.WriteLine("메시지");..
XML을 다루다 보면 노드를 통으로 복사하거나 옮겨야 할 때가 있습니다. 닷넷에서는 그런 동작을 할 때 'ImportNode'를 사용합니다. (참고 : MSDN - ImportNode ) 이전 글에서 처럼 테스트 데이터를 도큐먼트로 생성하여 사용합니다. 연관글 영역 1. 테스트 데이터 1-0 2-0 3-0 1-1 3-1 1-2 2-2 3-2 2. 노드(Node) 복사 노드(Node)를 복사하기 위해서는 1) 복사하려는 노드를 찾는다. 2) 'ImportNode'로 해당 로드를 복사한다. 3) 대상에 복사된 노드를 추가시킨다. 이런 순서로 하게 됩니다. //도큐 생성 XmlDocument xDocOriginal = new XmlDocument(); xDocOriginal.LoadXml(sDataOrigin..
비주얼 베이직(Visual Basic, VB)에서 편하게 썼던 문자열 처리 함수가 Mid를 비롯한 Left와 Right입니다. Mid : 문자열에서 지정된 인덱스에서부터 지정된 개수만큼 문자열 반환 Left : 왼쪽서부터 지정된 개수만큼 문자열 반환 Right : 오른쪽에서부터 지정된 개수만큼 무자열 반환 C#에는 'Mid'역할을 하는 'Substring'가 있는데 이것을 이용하여 'Left'와 'Right'를 구현할 수 있습니다. 물론 예외처리를 위해 'Mid'도 구현하면 좋죠 ㅎㅎㅎ 그 방법 외에도 'VB'를 참조하여 직접 'Mid', 'Left', 'Right'를 가져와 사용할 수도 있습니다. 참고로 'Mid'의 시작 위치는 1부터 시작합니다.(0부터 시작하면 에러가 남) 그러니 인덱스 방식으로 사..
디버그 심볼이란것은 빌드를 할때 디버깅이냐 릴리즈이냐에 따라 특정코드를 빼고 넣고 하는 기능입니다. 예를 들면 디버깅 할때는 A_DEV라는 클래스를 참조하여 디버깅이 쉽게 할수 있지만 릴리즈때는 A클래스를 참조 시켜 퍼포먼스 최적화를 노린다던가 할때 사용합니다. 저는 디버깅용 모듈을 만들어 쓰는 것을 좋아해서 디버깅 심볼을 자주 쓰진 않았습니다. 디버깅용 모듈을 만들면 릴리즈모드에서도 특정동작으로 디버그 메시지 같은 것을 출력할수 있게 하여서 디버깅이 쉽게 할수 있다는 장점 때문이죠 ㅎㅎㅎ 프로그램이 무거워 진다는 단점이 있지만 OTL 실버라이트로 넘어오니 웹서비스때문에 디버그 심볼을 자주 이용하게 되서 정리해 둡니다. 1.디버그 심볼 지정하기비주얼 스트디오에서 프로젝트 속성 > 빌드 > 조건부 컴파일 ..
Cannot create ActiveX component. 이 에러는 엑티브엑스 형태의 DLL을 사용할때 나는 에러입니다. 이런 dll은 그냥 참조도 안되죠 ㅡ,.ㅡ; 컴이나 어셈형태만 참조가능요~ 일단 Regsvr32를 사용하여 dll을 등록 해야 합니다. 참고 : MS고객지원 센트 - Regsvr32 사용법 및 오류 메시지 설명 명령프롬프트로 가서 regsvr32 [dll이름] 하심후 잠시 있으면 아래와 같이 등록됬다는 메시지가 나옵니다. 이렇게 등록을 해주면 참조도 가능합니다.
관련글 c++ DLL을 C#에서 사용해보자 ( 함수 마샬링 ) c++ DLL을 C#에서 사용해보자 ( 클래스 마샬링 ) 클래스 마샬링을 할일이 없엇 신경을 안쓰다가 요번에 스카이프 api나 제가 직접 마샬링 해볼까 해서 클래스 마샬링을 정리해 보았습니다. 근데 왜이렇게 자료가 없지? 겨우 찾은것이 비주얼C++ 팀블로그인데....네...영어입니다 ㅡ.-; (참고 : Visual C++ Team Blog - Inheriting From a Native C++ Class in C#) 일단 변환방법이 마음에 들지가 않아서 위글에 있는 내용을 그대로 사용하여 만들고 자료를 더 찾는다면 파트2로 돌아오 겠습니다 ㅎㅎㅎㅎ 그전에 이 글은 크게 2부분으로 나누어 설명할 예정입니다. 어찌됬건 프로그래머라면 일단 샘플부터..
닷넷이나 자바 같은 객체지향(Object-Oriented Programming, OOP) 언어에서는 다중상속이 되지 않습니다. 'C++'에서는 다중상속은 권장하지 않습니다. 부모가 여럿이면 어느 유전자가 어디서 왔는지 추적하기가 힘들기 때문입니다. 만약 다중 상속을 하려고 하면 다음과 같은 메시지가 나옵니다. 'WpfApplication1.MainWindow' 클래스는 여러 개의 기본 클래스('System.Windows.Window' 및 'baseTest')를 가질 수 없습니다. 개족보 만들지 말라는 오류입니다 ㅡ,.ㅡ; 1. 필요성 그런데 프로그램을 만들다 보면 베이스를 여러 개 만들어야 할 경우가 생깁니다. 대표적인 경우가 툴에서 생성해주는 컨트롤에 베이스를 붙일 때입니다. 둘다 이미 'Window'..
1. 문제를 만나다 일관성 없는 엑세스 가능성: '[대상]' 필드 형식이 '[다른 대상]' 필드보다 액세스하기 어렵습니다. 참고 : MSDN - 컴파일러 오류 CS0052 이 오류는 걸리면 난감합니다 ㅡ.-;;; 에러 위치가 애매하기 때문입니다 ㅎㅎㅎ 2. 원인 정말 초보적인 실수지만 자주 하는 실수로 상속에서 접근자를 잘못 써서 그렇습니다. 자식에서 사용하는 접근자는 부모와 같거나 더 접근하기 힘든 접근자를 사용해야 합니다. 3. 해결 방법 예를 들면 '퍼블릭(public)'이 아닌 클래스나 요소를 퍼블릭으로 선언하면 발생합니다. 부모는 프라이빗(private)인데 자식이 그보다 더 접근하기 쉬운 퍼블릭으로 선언했기 때문입니다. 이 경우 'claTest1'을 'public'로 선언하던지 생성할 때 퍼블..
.NET에서 XML을 사용하기는 엄청 쉽습니다. 문제는 실버라이트는 다른 방식을 사용합니다....;;;; 연관글 영역 1. 테스트 데이터 테스트 데이터는 아래와 같습니다. 1-0 2-0 3-0 1-1 3-1 1-2 2-2 3-2 2. 사용하기 'System.Xml' 만 유징 해주시면 됩니다. 사실 'XmlDocument'로 로드만 된다면 그다음부터는 노드(Node) 순서대로 검색만 하면 됩니다. //도큐 생성 XmlDocument xDoc = new XmlDocument(); xDoc.LoadXml(txtXml.Text); //루트가저오기 XmlNode xNode = xDoc.SelectSingleNode("tests"); //검색할 요소 리스트 XmlNodeList xNodeList = xNode.Se..
직역하면 스택이 초과해서 오류가 났다는 소리입니다. 연관글 영역 1. 증상 확인 보통 컨트롤같은 곳에 무한루프로 바인딩하거나 잘못된 값(필드를 불러와야 하는데 속성을 불러온다든가 할 때 발생합니다. 일부로 무한루프를 돌려 오류를 재현해 봅시다. 일반적으로 위처럼 눈에 딱 보이게 무한루프가 도는 경우는 거의 없습니다. (눈에 보이게 저런 에러를 낸다는 건 정말 초보적인 실수죠 ㅎㅎㅎ) 2. 일어나는 상황들 흔히 겪는 경우로 1) 오버 로딩 함수를 잘못 불러와 자기 자신을 호출하고 있다. 2) 자신이 전역에서 쓰이는 경우 전역에서 다시 자신을 호출한다. 3) 자신에서 몇 단계 거처 다시 나 자신을 호출한다. (A->B->C->A) 4) 데이터 바인딩 시 바인딩 조건에 의해 같은 함수가 무한으로 호출된다. 5..