C#에서 현재 경로를 알아내는 방법은 여러가지가 있다.

1. System.Environment.CurrentDirectory

가장 쉽게 현재 실행 경로를 알아낼 수 있는 방법이다. 하지만 이 방법은 Register에 등록된 프로그램으로 실행되면 다른 값을 출력한다. 이때는 3번 Application.StartupPath를 이용해야 한다.

* 루트일 경우에는 '\' 반환, 그 외의 경우에는 폴더명까지만 반환한다.
  • C:\
  • C:\TestFolder\MyApp

2. System.IO.Directory.GetCurrentDirectory()


1번과 동일하다.


3. Application.StartupPath

위의 Register에 등록되었을 때도 정상적으로 자신의 시작 경로를 반환한다. 하지만 이는 Window Forms를 사용할 때만 Application 클래스를 사용할 수 있기 때문에 Console 기반 혹은, 클래스 라이브러리 기반에서는 사용이 불가능하다.
Tip. Application.ExecutablePath
현재 실행된 어플리케이션의 실행 파일의 위치이다. C:\Test\App.exe 와 같이 출력된다. 이 정보는 현재 경로가 아니기 때문에 변경되지 않는다.

2010/04/27 11:40 2010/04/27 11:40

이 글의 목적은 외부에 있는 오라클 DB에 ODBC를 이용하여 접근하기 위한 세팅이다.

오라클은 뭘해도 귀찮다.역시 독보적인 기업이란 것의 이름만큼 독단적인 면이 있는 것 같다.
MFC에서 지원하는 쉬운 ODBC세팅들을 바로 이용할 수 없고 Oracle 서버와 연동하기 위한 Instant Client Package를 설치해야한다. Basic 패키지, ODBC 패키지 두번이나 설치해야 MFC에서 ODBC를 이용하여 개발이 가능하다.

물론, OCI(Oracle Communication Interface)를 이용한 가장 빠른 방법이 있지만 개발 시간이 더 걸리기만 하는 불필요한 작업인 것 같다. DB활용도가 높은 편이 아니다면 역시 쉬운 ODBC 강추, 나중에 DB교체도 쉽기 때문에 ODBC로 개발하기로 하였다.

예전에는 Oracle Client를 깔아야만 오라클과 연동이 가능하였지만 현재는 Instant Client만으로도 쉽게 접속이 가능하다. 하지만 관련자료가 조금(?) 부족해서 힘들었다.



1. Instant Client 의 다운로드

다운주소 : http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html

  • instantclient-basic-win32-11.1.0.7.0.zip (46,734,555 bytes)
  • instantclient-odbc-win32-11.1.0.7.0.zip (728,899 bytes)

  위의 두 파일을 공통된 폴더에 압축을 푼다. 기본적으로 위의 버젼일 경우에는 instantclient_11_1 을 기준으로 풀리게 되어있다. 나중에 환경변수 설정을 용이하게 C:\Oracle\instantclient_11_1 로 해제하여 모아두었다.


2. 오라클 ODBC 드라이버의 설치

  odbc_install.exe 파일을 클릭하면 쉽게 ODBC드라이버가 자동으로 설치된다. 실패할 경우에는 dll 파일이 정상적으로 존재하는지 확인하고 부족하다면 새로 다운 받아 설치하자.

  설치 후엔 ODBC드라이버에서 아래와 같이 "Oracle in instantclient_11_1" 이 뜨는지 확인하면 설치완료.
  ( 제어판 > 관리도구 > 데이터원본(ODBC) > 드라이버 )

Oracle ODBC 드라이버



3. 환경변수 설정

  basic 패키지를 사용하기 위해서는 환경변수의 설정이 필요하다. 윈도우 환경변수 설정란으로 들어가서 아래와 같이 설치된 위치를 적어주자.

  • Path                   C:\Oracle\instantclient_11_1
  • NLS_LANG           KOREAN_KOREA.AL32UTF8
  • ORACLE_HOME    C:\Oracle\instantclient_11_1
  • TNS_ADMIN         C:\Oracle\instantclient_11_1


4. tnsnames.ora 설정

  tnsnames.ora는 PC에서 Oracle로 붙기 위한 설정 파일이라고 생각하면 된다. 아래의 샘플을 보고 자신의 서버에 맞게 세팅하자. 아래의 설정은 외부서버에 접속하기 위한 기본세팅.

 ORCL=
 (DESCRIPTION=
  (ADDRESS_LIST=
   (ADDRESS=(PROTOCOL=TCP)(HOST=아이피)(PORT=포트))
  )
  (CONNECT_DATA=
   (SERVER=DEDICATED)
   (SID=SID네임)
  )
 )

5. ODBC의 추가

  위의 ORCL은 tnsnames.ora에서 사용하는 이름이다. 이것을 ODBC에서 실질적으로 사용하는 시스템DSN으로 바꾸기 위해서 ODBC를 추가해준다. 기본적으로 시스템에서 사용하기 때문에 시스템DNS에 아래와 같이 새로 추가한다.

ODBC Oracle


6. 사용하기

사용하기는 쉽다. 역시 생각되로 그냥 CDatabase 로 ODBC 프로그래밍을 한다면 쉽게 처리가 된다.
자세한 정보는 인터넷 검색-ㅅ-;


2009/11/04 12:07 2009/11/04 12:07
말도 안되는 에러가 발생했다.
딱 2시간 전에도 컴파일 되던 동일한 프로젝트가 VS2008에서 에러가 발생한 것이다.
에러메시지는 아래와 같다.

'cmd.exe'을(를) 생성하는 동안 오류가 발생했습니다.

살다가 저런 오류는 본 적도 없다.
여러 사이트를 검색 후 찾은 것은 두가지의 해결방법!



1. 매니페스트(Manifest)의 사용으로 발생 가능
프로젝트 속성 > 매니페스트 도구 > 입력 및 출력 >패니페스트 포함 > 아니요
'예'를 '아니요'로 변경하면 다시 컴파일이 가능하다.



2. 환경변수의 변경

아마도 원인은 NSIS일 것이라고 생각된다. 이후 변해버렸다고 하는 사람들이 몇명 있다.

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE;C:\Program Files\TortoiseSVN\bin;C:\Program Files\NSIS;

위와 같이 VS8의 주소란에 \\으로 되어있어서 제대로 파싱을 못 하는 경우가 있다. 이 경우에는 아래와 같이 \\을 \로 변경하면 정상적으로 컴파일이 된다.

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\TortoiseSVN\bin;C:\Program Files\NSIS;


아직도 이 현상의 범인은 알 수가 없지만 새로운 에러 상황에 대한 대처로는 충분할 것이라고 생각한다.

2009/11/02 19:58 2009/11/02 19:58
일단 시작하기 전에 이 글은 MFC의 다이얼로그의 Picture Control로 OpenCV를 이용해서 캠 영상을 뿌리기 위한 방법을 알려주는 글입니다.^^v 쉽게 말해서~ 초보용입니다!!

OpenCV의 설치는 했으니 이제 캠과 컴퓨터를 연결해주는 아주 생각만 해도 어렵고 복잡해 보이는 일을 처리해야된다. 하지만 이런 작업들도 OpenCV 라이브러리에 다 들어있다고 하니 cvcam , 이름만 들어도 두근두근 거리게 멋지군!

나도 중간에 안 사실이지만 OpenCV 1.1부터는 cvcam이 사라지고 highgui 속에 포함된다!
다시 말해서 cvcam.lib 는 더이상 없고 함수명도 조금 달라졌다.


1. MFC 프로젝트의 생성

학교에서 지원해주는 Visual Studio 2008(VS는 너무 비싸다, 지원해주는걸 써야지^^;)을 이용해서 간단한 MFC  프로젝트를 생성한다. 그리고 프로젝트 속성에서 추가 라이브러리로
cv.lib cxcore.lib highgui.lib

을 추가한다.

OpenCV 프로젝트 설정 - 라이브러리 추가



2. stdafx.h 파일 수정



기본적으로 OpenCV를 위한 필요한 헤더 파일을 추가한다.

3. UI의 제작

.rc 파일을 수정하여 자신이 사용할 다이얼로그의 디자인을 구성한다.

간단한 UI 구성



4. MediaGestureDlg.h 헤더파일 수정


위의 멤버변수 및 함수를 추가하여준다. 위의 변수들은 m_thread 는 OpenCV를 이용해서 실시간으로 캠으로부터 이미지를 캡쳐해내기 위한 변수이고 m_msgLog 는 로그용, m_pCameraWnd는 픽처컨트롤용 핸들이다.

위에 것이 이해가 안된다면 MFC 공부하러 고고씽!!

5. MediaGestureDlg.cpp 파일 수정

BOOL CMediaGestureDlg::OnInitDialog() 속에 기본적으로 핸들값과 기본설정을 한다.


위의 소스는 쓰레드의 생성과 중지이기 때문에 쓰레드 관련해서 조금만 공부하면 쉽게 이해가 될 것이기 때문에 또 간단하게 넘어가고 제일 중요한 OpenCamera() 함수이다. ManageThread에도 존재하고 있는데 여기서 무한루프를 돌기 때문제 짧고 건조하게 짜주는게 좋지 않을까?

하지만 영상처리! 조금씩 쓰다보면 복잡해진다. 헛소리 그만하고 OpenCamera는 다음과 같이 작성한다




위의 소스에서 AddLog()는 개인적으로 필요해서 사용하는 함수이기 때문에 무시해도 된다. 기본적인 내용은 OpenCV의 내용과 동일하기 때문에 따로 설명할 것은 없다.

다음으로 소스의 가장 위쪽에 부모 파라미터 포인터 자식포인터를 위해서 아래와 같이 define문을 선언한다.



그리고 마지막으로 다이얼로그가 종료될 때 쓰레드도 함께 종료시킬 수 있도록 DestoryWindow를 재정의한다.



이렇게만 하면 아래처럼 정상적으로 프로그램이 작동하게 된다. 참 쉽죠잉~!

하지만, 이제부터 본격적인 영상처리의 입문인게요!! 푸하하하!!!

OpenCV를 이용한 다이얼로그



그리고 정말 마지막으로 허접한 위의 소스를 다운 받고 싶은 분은 아래의 링크를 눌러주세요!!



위의 소스는 OpenCV설치하기 에 적힌 것처럼 OpenCV를 사용하기 위한 설정을 마쳤다면 컴파일 하였을 경우 바로 실행될 것이다. 참고로 Visual Studio 2008로 제작하였다.

2009/06/12 00:02 2009/06/12 00:02
 졸업작품으로 영상처리 구현을 할 필요가 있어서 생판 첨해보는 영상처리를 당장 이번에 오는 월요일까지 만들어내야만 했다. 일단 간단한 프로토타입 프로그램이라도 만들어내라니깐 빨리 만들기 위해서 영상처리 관련 정보를 찾다보니 제일 많이 걸리는 것이 OpenCV였다.

 솔직히 내가 사용하는 것이 어디서 만들던 그런 것은 중요한 것이 아니다.  제작해주신 많은 오픈소스 업체와 관련자 분들께 죄송합니다 (__) 꾸벅, 어쩔 수 없잖아. 바쁜데 ㅠㅠ
Download : http://sourceforge.net/projects/opencvlibrary

위의 주소에서 일단 OpenCV 라이브러리를 다운 받는다.  역시 윈도우가 이런 면에서 편한 것 같다. 부담없이 윈도우용으로 패키지 된 OpenCV_1.1pre1a.exe (오늘 2009.05.15) 을 다운 받아서 바로 설치하였다.

[ Visual Studio 6.0 설정]

1. VS6.0 Option 설정 (한번만 하면 됨!)

1) Tools > Options > Directories(탭) 을 선택한다. 그리고 아래와 같이 Show directores for: 의 값을 Include files로 선택한다.

#01 VS6.0 Option 설정 - Include files 

그리고 아래의 값들을 추가시켜준다.
"C:\Program Files\OpenCV\cv\include"
"C:\Program Files\OpenCV\cxcore\include"
"C:\Program Files\OpenCV\otherlibs\highgui"
"C:\Program Files\OpenCV\cvaux\include"
"C:\Program Files\OpenCV\otherlibs\_graphics\include"

2) Show directores for: 의 값을 Library files

#02 VS6.0 Option 설정 - Library files

위의 화면처럼 아래의 값을 추가하여준다.
"C:\Program Files\OpenCV\lib"

3) Show directores for: 의 값을 Source files
"C:\Program Files\OpenCV\cv\src"
"C:\Program Files\OpenCV\cxcore\src"
"C:\Program Files\OpenCV\cvaux\src"
"C:\Program Files\OpenCV\otherlibs\highgui"
"C:\Program Files\OpenCV\otherlibs\_graphics\src"

위와 동일하게 설정하면 된다.

#03 VS6.0 Option 설정 - Source files 



2. VS6.0 프로젝트 설정 (OpenCV를 사용하는 프로젝트마다 필요)

#04 VS6.0 Project 설정

Project > Settings > Link(탭) 으로 들어가서 Object/library modules 에
cv.lib cxcore.lib highgui.lib

을 넣어준다. 그리고 이제 프로그래밍을 하면 된다^ㅡ^v

 

3. 간단한 소스




4. 에러(0xc0150002)의 발생

#05 OpenCV 컴파일&실행 중 에러

위의 세팅되로 다 하였지만 에러가 떠버렸다. 이건 뭥미! (-- );

(0xc0150002) 에러의 발생 알아보니 OpenCV_1.1pre1a.exe 버젼의 경우에는 Visual Studio 2005를 기반으로 개발되어있다고 한다.  그래서 DLL 파일 자체게 2005에서 만들어져서 VS6.0에서 사용할 때는 "초기화 할 수 없습니다" 라는 에러를 발생한다.

-0- 너무 최신 버젼(?)이라서 생기는 단점이다. 이를 해결하기 위해서는 아래에 MS사에서 제공되는 패치를 설치하면 해결할 수 있다.

Download : http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en

그렇게 패치까지 하고 나니깐 성공적으로 컴파일이 되었다 :)

#06 OpenCV 이미지 뛰우기 성공

드디어 캠을 통한 영상처리의 첫 발걸음 중... OpenCV를 설치하는 순간이다!
2009/05/15 18:22 2009/05/15 18:22
대구버스도착정보 위젯


기능
  • 버스 정거장 이름 검색을 통한 버스도착정보
  • Dashboard 열릴 때마다 현재정보 최신화


버젼
  • 2009.03.11 PureDaeguBus v0.1.0 // 처음이자 마지막일 수 있는 버젼^^;


업데이트 하고 싶은 항목
  1. iPod Touch에서 사파리로 쉽게 접속해서 볼 수 있는 웹페에지( php )
  2. 버스번호 검색 기능 : 당연한 건데 왜 없지?
  3. 지하철 도착 시간 기능 : 구현은 쉽지만 지하철 홈페이지에서 시간 따는 노가다가 힘들어서 누가 따 준다면 당장 만들겠습니다 T-T
  4. 지하철 막차 정보 : 나에게 꼭 필요한 정보, 자주 막차를 탄다-_-;
  5. 자주가는 정거장 저장기능
  6. 성능 개선 : 약간 느린듯?
  7. 지역 변경 기능


개발후기

꽤 오래전에 위젯에 대해서 간단하게 공부하면서 만들었던 대구버스도착정보 위젯이다.

당연히 MacOS X에서 사용할 수 있는 Dashboard용 위젯이다. 윈도우 비스타 버젼으로도 만들어볼까? 하였지만 귀찮니즘과.. 과연 누가 필요로 할까? (대구의 웬만한 역에 버스도착정보 전광판이 설치되었다) 라는 하찮은 생각... 그리고 좌절스러운 토익성적 때문에 잠정적 보류에 빠져든 위젯이다.

이 녀석을 위해서 나름 디자인에도 신경쓰고 열심히 만들었다. 사용법은 매우 간단하다!

검색창에 자신이 조사할려고 하는 "정거장 이름" 을 입력하면 된다. 아직 버스번호를 통한 검색은 지원되지 않는다. 왜냐하면 ... 역시나 귀찮아서 안 만들고 있다. 혹시라도 원하는 사람이 5명 이상만 된다면 만들겠다! (혹은 윈도우 버젼을 원하는 사람이 5명 이상만 된다면... )

혹시라도 원하는 분들은 댓글을...

뭐 어찌되었던 만들면서 AJAX 개념도 살짝 잡을 수 있었고 이런 저런 욕심도 많았다. 앞으로 언젠가는 더 발전 된 모습의 버젼이 나타날 것이다. 현재는 ... 무한대기, 자극이 필요함!
2009/03/11 20:37 2009/03/11 20:37