기본 콘텐츠로 건너뛰기

1월, 2011의 게시물 표시

버젼 넘버 추가하기

C# 프로젝트를 생성하면 버젼 넘버는 프로젝트에 추가되어 있지 않습니다. 버젼 넘버를 추가하려면 '속성' 메뉴를 클릭하여 'Application' 탭에서 'Application Information' 버튼을 누릅니다. 위의 화면에서 Assembly Version , File Version을 추가하여 'OK'버튼을 누르면 버젼 넘버를 추가할 수 있습니다. GUID는 자동으로 채워주기 때문에 입력하지 마세요.

V7 Compiler Error

오늘 아주 흥미로운 현상을 발견했습니다. 소스의 맨 첫째 줄에 주석을 넣으니 V7 컴파일러가 에러를 뱉어 내었습니다. 아래와 같이 첫번째 줄에 주석을 넣으니 말이죠... #include <mdl.h> // comment in first line #include <cexpr.h> #include <rscdefs.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <cmdlist.h> #include <dlogitem.h> #include <system.h> #include <global.h> #include <userfnc.h> #include <mselems.h> #include <refernce.h> #include <tcb.h> #include <scanner.h> #include <mdldim.h> #include <dlogman.fdf> #include <msdim.fdf> #include <mdlerrs.h> #include <clipdscr.h> #include <msfile.fdf>

jsm 파일 만들기

Bentley 제품군에서 Navigator라는 제품이 있습니다. 이름에서도 풍기듯이 모델링하는 툴이 아니라 뷰어입니다. Navigator가 jsm 파일을 읽을 수 있는데 이 jsm 파일은 Dgn 파일을 변환시킨 것입니다. 왜 굳이 시간을 들여가면서 Dgn 파일을 변환하여 jsm 파일을 만든 후에 이것을 Navigator로 볼까? 하는 의구심이 들기도 했습니다만... 이렇게 하는 이유?가 있었습니다. 보고자 하는 속성들을 jsm 파일을 만들때 넣어 줄수 있다는 것입니다. 즉 보기 쉽게 포맷된 형식으로 속성을 넣어 볼수 있다는 것입니다. 이 포맷된 형식은 JSpace Class Editor라는 툴을 이용하여 정의할수 있습니다. 사실 JSpace Class Editor는 약간 오래된 프로그램인데, KEPCO E&C에서 현재 사용하고 있습니다. 예를 들면 위의 형식대로 Navigator에서 볼수 있다는 것입니다. 실제 jsm 파일 생성은 Interference manager에서 합니다. Grouping Class 버튼을 눌러 JSpace Class Editor에서 생성한 Class Library를 선택합니다. 최종적으로 'Extract' 버튼을 누르면 jsm 파일이 생성됩니다. <Bentley Navigator 화면>

ON_UPDATE_COMMAND_UI in FormView

FormView에서 ON_UPDATE_COMMAND_UI 매크로가 제대로 적용되지 않을때 PreTranslateMessage 함수를 오버라이드해서 아래와 같이 UpdateDialogControls 함수를 호출하면 원하는 결과를 얻을수 있습니다. [-] Collapse BOOL   CLineListForm :: PreTranslateMessage ( MSG *   pMsg ) {      UpdateDialogControls ( this ,   TRUE ) ;      return   CFormView :: PreTranslateMessage ( pMsg ) ; }

Enable multi-user installation

어떤 설치 프로그램을 보면 설치시 전체 사용자들이 사용 가능하도록 설치할 것인지, 혹은 현재 사용자만 사용가능 하도록 할것인지 물어보는 페이지가 있습니다. NSIS에서 이를 가능하게 해보도록 하겠습니다. multi-user page를 사용하기 위해서는 modern UI 2를 사용해야 합니다. 만일 MUI.nsh를 인클루드 하더라도 MUI2.nsh를 먼저 인클루드 해야만 합니다. 그렇지 않을경우에는 에러를 발생합니다. 아래는 코드의 일부입니다. ---------- !define MULTIUSER_EXECUTIONLEVEL Admin !define MULTIUSER_MUI !define MULTIUSER_INSTALLMODE_COMMANDLINE . . . !insertmacro MULTIUSER_PAGE_INSTALLMODE Function .onInit !insertmacro MULTIUSER_INIT . . . FunctionEnd Function un.onInit !insertmacro MULTIUSER_UNINIT . . . FunctionEnd

Embedding other installers

설치 중에 MSI 파일을 설치할 필요가 있어 단순히 1 ExecWait  "$INSTDIR\NetPlantWAVE_PDS168.msi" cs 로 실행시키니 설치가 되지 않았습니다. nsis 홈페이지에 가보니 해결책이 있더라구요. 아래와 같이 호출하면 MSI 파일을 설치할 수 있습니다. 1 ExecWait  '"msiexec" /i "$INSTDIR\NetPlantWAVE_PDS168.msi"' cs 퇴근길에 잠시 생각해 보니 어려운 문제가 아니었습니다. MSI는 실행 파일이 아니기 때문에 msiexec.exe로 실행시켜줘야 합니다.

mdlLinkage_appendUsingDescr 오류

mdlLinkage_appendUsingDescr 호출 실패 때문에 미치겠습니다. 다른 프로젝트와 똑 같이 했는데 왜 실패하는지? mdlCell_create(&groupCell, pToken1->buf[2], NULL, FALSE); mdlElmdscr_new(&chainDscrP,NULL,&groupCell); addUserData(&chainDscrP , filePos); //! mdlLinkage_appendUsingDescr 호출 filePos = mdlElmdscr_add(chainDscrP); Private int addUserData( MSElementDescr **elP , ULong filePos ) { int status; char cMsg[100]; char linkString[MAXFILELENGTH]; LinkageHeader linkHdr; memset(&linkHdr, '\0' , sizeof(LinkageHeader)); linkHdr.info =0; linkHdr.remote =0; linkHdr.modified =0; linkHdr.user =1; linkHdr.class =0; linkHdr.words; linkHdr.primaryID = 901; memset(&linkInfo , '\0' , sizeof(LinkInfo)); strcpy(linkInfo.tag_Name1 , "hello"); status = mdlLinkage_appendUsingDescr( elP, &linkHdr, &linkInfo, RSCID_DataDef_Link, NULL, FALSE); if (status ==

C# 에서 ATL 프로젝트 디버깅하기

Project Setting에서 Debug 탭에서 'Enable unnamaged code debugging'를 체크해 줍니다. 그런데 솔직히 이해가 가지 않습니다. C#에서 실행 파일을 생성한 후 ATL 프로젝트에서 실행 파일을 선택한후 디버깅을 할려고 브레이크 포인터를 잡고 디버깅을 할려고 하는데 브레이크 포인터가 잡히지 않고 그냥 실행이 되어 버렸습니다. 왜 그럴까요?

Extracting smart solid element

MSElementDescrP bodyToElements ( KIBODY* pBody, // => MSElementP pTemplate, // => can be NULL int nIsoLines // => ) { MSElementDescrP pNewEd = NULL; if (NULL == pBody) return NULL; mdlKISolid_beginCurrTrans (ACTIVEMODEL); mdlKISolid_bodyToElements (&pNewEd, pBody, TRUE, nIsoLines, pTemplate, ACTIVEMODEL); mdlKISolid_endCurrTrans (); return pNewEd; } ;2011.07.04 kisolid.dll를 library에 추가해야 합니다.

오라클 클라이언트 설치 없이 오라클에 접속하기

이전에 오라클에 접속하기 위해 항상 오라클 클라이언트를 먼저 설치를 했었는데, 그렇게 하지않아도 접속하는 방법이 있습니다. 아래 링크에 접속해서 한번 살펴보시기 바랍니다. Instant Oracle Using C#: http://www.codeproject.com/KB/database/C__Instant_Oracle.aspx 간단히 정리하자면 오라클 홈페이지에 가서 instant client basic을 다운로드합니다.(몇개의 버젼이 있는데 원하는 버젼을 다운로드하면 됩니다.) 풀어보면 여러개의 dll파일들이 있는데 여기서, oci.dll , orannzsbb11.dll , oraocci11.dll , oraociei11.dll , oraociicus11.dll , orasql11.dll 위 파일들을 실행 파일이 있는 폴더에 넣어두면 오라클에 접속이 가능합니다. 그리고 아래와 같이 System.Data.OracleClient 를 참조해서 사용하시면 됩니다. 예전에 항상 오라클 클라이언트를 먼저 설치를 했었는데 이제는 응용 프로그램에 포함하기만 하면 되니까 설치가 훨씬 쉬워졌습니다. 2012.08.23 이진 데이타를 읽고 쓸려고 하니까 System.Data.OracleClient로는 되지 않아서  오라클 사이트에서 다운 받은 Oracle.DataAccess dll을 참조하여 사용하였습니다.