기본 콘텐츠로 건너뛰기

8월, 2010의 게시물 표시

xml , 그리고 한글

프로젝트의 간단한 툴로 url상에 있는 xml 문서를 파싱하여 GUI에 뿌려주는 유틸리티를 파이썬으로 작성했었는데, 파이썬 2.6에 기본으로 내장되어 있는 expat이 한글을 지원하지 않아서(사용자는 한글이 지원되야 한다고 지원해달랍니다..) 인터넷을 이리 저리 뒤져 봤으나 포기하고 C#으로 만들기로 했습니다. 프로그램 작성하는데 그리 시간이 걸리지 않았습니다만, xml의 문자를 인코딩하는데서 시간이 걸렸습니다. 이제 까지는 문자 세트를 고려하지 않고 코딩을 해왔었는데, 이런 문제에 걸리니 난감했습니다. xml 파일로 저장할 때도 인코딩하여 저장을 해야 하더라구요. euc-kr의 code page를 찾아와 Encoding 클래스를 하나 생성해서 StreamWriter의 인자로 넘겼습니다. 이제 StreamWriter로 파일에 쓰면 euc-kr 문자셋으로  저장이 됩니다. int euckrCodePage = 51949; Encoding euckr = Encoding.GetEncoding(euckrCodePage); FileStream fs = new FileStream("updateinfo.xml", FileMode.Create); StreamWriter s = new StreamWriter(fs , euckr); ;2011.07.12 지금 생각하면 말도 안돼는 코딩이었습니다. xml 파일을 생성하는데 StreamWriter 클래스를사용하다니요... XmlTextWriter 클래스를 사용하면 될 것을...

MSTN XM VBA - Lession3(요소 생성하기)

VBA 교육은 하지 않는 것으로 결정이 났습니다. 앞으로 VBA 관련 업데이트는 자주 없을것 같습니다. 자 이제 LineString을 그리는 매크로를 작성해 보도록 합시다. 전체 소스는 아래와 같습니다. Sub Macro1() Dim startPoint As Point3d Dim point As Point3d, point2 As Point3d 'Start a command CadInputQueue.SendCommand "PLACE SMARTLINE " 'Coordinates are in master units startPoint.X = 7.316122 startPoint.Y = -4.865692 startPoint.Z = 0# 'Send a data point to the current command point = startPoint CadInputQueue.SendDataPoint point, 1 'Send a data point to the current command point.X = startPoint.X + 2.48087 point.Y = startPoint.Y + 3.0765 point.Z = startPoint.Z CadInputQueue.SendDataPoint point, 1 'Send a data point to the current command point.X = startPoint.X + 7.6503 point.Y = startPoint.Y + 1.9341 point.Z = startPoint.Z CadInputQueue.SendDataPoint point, 1 'Send a reset to the current command CadInputQueue.SendRes

MSTN XM VBA - Lession2(매크로 기록하기)

앞서 생성한 Sample1 프로젝트에 매크로 기록하는 것을 알아보겠습니다. 이 부분은 솔직히 설명할 것도 없습니다. 먼저 Sample1 프로젝트를 선택하시고, Start Record 버튼을 누릅니다. 예제로 선,사각형,원을 그려보겠습니다. 그리고 모두 선택한후 Ctrl+G를 눌러 Cell로 만들어 보겠습니다. 일련의 행동을 마쳤으면, Stop Record 버튼을 눌러 레코딩을 종료합니다. 이로써 하나의 매크로를 생성하였습니다. 생성한 매크로를 실행할려면, Macros 버튼을 눌러 생성한 매크로를 실행시키면 됩니다. 아래에 우리가 생성한 Macro1이라는 매크로가 보이죠? Run 버튼을 눌러 실행시키면 됩니다.

MSTN XM VBA - Lession1(프로젝트 생성하기)

이 글은 외부 교육이 예정되어 있어 교육 준비 차원에서 작성한 글입니다. 맨 먼저 VBA 프로젝트를 생성하기 위해 아래 처럼 메뉴로 가서 프로젝트 관리자를 실행시킵니다. 프로젝트 관리자에서 오른쪽 버튼을 클릭하여 메뉴가 나타나면, New 항목을 선택합니다. 다이얼로그 박스가 나타나면 VBA 프로젝트를 생성할 폴더와 프로젝트 이름을 입력합니다. 마침내 우리의 첫번째 VBA 프로젝트가 생성되었습니다.

Use VC++ to create a DLL file and use its functions in Visual Basic 6 Programming Tips

VB에서 VC DLL을 호출 할때 호출 규약 오류 때문에 DLL을 찾을수 없다고 메세지를 띄울 때 처리하는 방법입니다. 저희 회사는 아직도 VB 6.0을 사용하고 있거던요.(지금도 UI를 VB로 개발해요 ㅠㅠ) 간단히 말하면 VC에서 __stdcall 호출 규약을 사용하여 DLL 함수를 만들구요, VB쪽에서 함수를 선언할때 DLL 전체 경로를 주고요, 또한 Alias를 설정해 줍니다. 배포할 때 주의 사항은 DLL 전체 경로를 주면 실행시 해당 경로에 DLL을 찾기 때문에 오류가 발생할수 있습니다. 따라서 DLL 전체 경로를 없애야 합니다.(대부분이 DLL을 실행 파일이랑 같이 두니까요) 원본 : http://b4you.net/blog/tag/%ED%98%B8%EC%B6%9C%EA%B7%9C%EC%95%BD VC에서 만든 DLL을 VB에서 사용할 때 애먹고 있으신 분들을 위해.. 참고로, 굳이 프로젝트 세팅에서 __stdcall 방식으로 바꿀 필요는 없다. 이렇게 하면 c 코드를 작성하는 모든 부분의 데이터를 이상하게 처리해야될지 모르므로 -ㅅ-;; 각 함수마다 __stdcall을 이용하면되는데.. 예를 들면 int __stdcall a(){} 와 같이 함수 선언부에 __stdcall를 붙이면 이 함수만 __stdcall 규약을 따르게 될 수 있다. P.S. 보통 Windows API들이 __stdcall을 따른다. 그 이유는, Windows에서 제공하는 API들은 VC, VB, Delphi 등등의 프로그램에서 사용되어야 하므로 표준 규약인 __stdcall을 지키는것이며, 그래서 VC에서 Windows API들이 선언된 것을 보면 WINAPI 라고 된 것을 볼 수 있다. 이 WINAPI는 PASCAL 형이며, PASCAL은 _pascal 의 별칭이다. (wtypes.h에 define 되어 있으며, pascal과 stdcall방식은 서로 같다. pascal방식은 caller가 stack을 삭제하는 것이다.)