1. 버추얼박스(VirtualBox) 컨트롤러 에서 공유 폴더 설정
2. 버추얼박스의 윈도우7 내컴퓨터에서 메뉴>도구>네트워크 드라이브 연결
3. \\vBoxSrv\[공유폴더 이름]
- [공유폴더 이름] : 버추얼박스에서 공유 폴더 설정할때 생성된 이름임
1. 버추얼박스(VirtualBox) 컨트롤러 에서 공유 폴더 설정
2. 버추얼박스의 윈도우7 내컴퓨터에서 메뉴>도구>네트워크 드라이브 연결
3. \\vBoxSrv\[공유폴더 이름]
- [공유폴더 이름] : 버추얼박스에서 공유 폴더 설정할때 생성된 이름임
Nov 22
Programming/Windows Programming c++, c/c++, mfc, Programming,tips, Tips&Tricks, Win32 console application 5 Comments
이미 잘 알려진 내용이지만 제 블로그의 검색을 위해 짧게 포스팅합니다.
Visual Studio 6.0에서 Win32 콘솔 애플리케이션 (Console Application)으로 프로젝트를 만들어 표준 C/C++ 라이브러리를 이용할 때 MFC (Microsoft Foundation Class Library)의 클래스들 (e.g. CString, CObList)을 이용하는 방법입니다.
1. CRT (C Run-Time) library를 Multithreaded로 변경
MFC 클래스를 위한 헤더 파일들을 포함시켜도 링크 에러가 나는 것은 Win32 console application 프로젝트는 기본적으로 “Single-Threaded” CRT library를 사용해서 멀티스레드를 위한 api 구현이 없기 때문입니다. 그래서 이와 같이 CRT 라이브러리를 변경하는 것입니다.
2. 필요한 헤더 파일 포함
사용할 MFC 클래스를 정의하고 있는 헤더 파일들을 포함합니다.
※ MFC의 헤더 파일과 라이브러리 설명은 Devpia의 이 글을 참고하시면 됩니다.
간단히 많은 것을 포함하는 헤더 파일들만 설명드리면..
Afx.h: MFC를 위한 main header file로 컨테이너를 비롯한 많은 MFC 클래스들을 선언합니다.
Afxtempl.h: CArray등 템플릿을 요하는 클래스들의 선언을 가지고 있습니다.
간단히 CString이나 CObList를 사용하는 경우는 Afx.h를 포함하면 될 것이고
CArry, CList등 템플릿 컨테이너 클래스를 사용할 경우는 Afxtempl.h를 포함하면됩니다.
순서는 Afx.h가 먼저 오는 것이 좋겠죠? (순서가 바뀌어도 컴파일 에러는 나지 않으나…)
컨테이너 간의 복사는 자료형이 다르더라도 카피 알고리즘에 의하여 호환성을 지닌다.
주의할 점은 덮의 씌워지는 대상의 객체의 사이즈가 원본컨테이너의 사이즈보다 같거나 커야한다.
copy알고리즘을 사용하기전에 resize명령어로 컨테이너의 사이즈를 꼭 재조정 하도록 한다.
다음예제는 컨테이너와 컨테이너간에 값을 덮어 씌우는 방법이다.(추가가 아님!)
#include "stdafx.h"
#include <iostream>
#include <list>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
list<int> a1;
vector<int> a2;
for(int i = 0; i < 10; ++i)
a1.push_back(i);
a2.resize(a1.size());
copy(a1.begin(), a1.end(), a2.begin());
deque<int> a3(a1.size());
copy(a1.begin(), a1.end(), a3.begin());
for(int i = 0; i < 10; ++i)
cout << a2[i] << ' ' << a3[i] << ' ';
cout << endl;
return 0;
}
다음 예제는 컨테이너에 반복자 어댑터를 사용하여 새로운 원소를 추가하는 방법이다.
미리 정의된 삽입 반복자에는 3가지가 있다
back_inserter(container) - push_back()을 사용하여 뒷부분에 추가시킨다
front_inserter(container) - push_front()를 사용하여 앞부분에 추가시킨다
inserter(container, pos) - insert()를 사용하여 pos위치에 삽입한다.
#include "stdafx.h"
#include <iostream>
#include <list>
#include <vector>
#include <deque>
#include <set>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
list<int> a1;
for(int i = 0; i < 10; ++i)
a1.push_back(i);
//a1의 모든 원소들을 a2에 뒷부분으로 추가한다.
vector<int> a2;
copy(a1.begin(), a1.end(), back_inserter(a2));
//a1의 모든 원소들을 a3에 앞부분으로 추가한다.
deque<int> a3;
copy(a1.begin(), a1.end(), front_inserter(a3));
//a1의 원소들을 a4에 복사한다.
//연관 컨테이너는 오직 inserter()와만 동작한다.
set<int> a4;
copy(a1.begin(), a1.end(), inserter(a4.begin());
return 0;
}
/*
std::list<CUser *> l1;
std::vector<CUser *> v1;
for( nSeed = 0; nSeed < MAX_SEED; nSeed++ )
{
l1.assign( m_QueUser[ nSeed ].GetListInactive()->GetList()->begin(), m_QueUser[ nSeed ].GetListInactive()->GetList()->end() );
v1.resize( l1.size() );
std::copy( l1.begin(), l1.end(), v1.begin() );
for( INT8 n = 0; n < RAND(v1.size()); n++ )
std::random_shuffle( v1.begin(), v1.end() );
std::list<CUser *> l2(v1.begin(), v1.end()); // 다른 방법: std::copy(v1.begin(), v1.end(), std::inserter(l1, l1.begin()));
m_QueUser[ nSeed ].GetListInactive()->GetList()->clear();
m_QueUser[ nSeed ].GetListInactive()->GetList()->assign( l2.begin(), l2.end() );
l1.clear();
l2.clear();
v1.clear();
}
//*/
//////////////////////////////////////////////////////////////////////////
// INT8 i;
// TRACE("==START=================================================================================\n" );
// for( i = 0; i < 1; i++ )
// {
// CSync Sync( m_QueUser[ i ].GetListInactive()->GetSync() );
// CSyncList<CUser>::SYNC_POSITION pos = m_QueUser[ i ].GetListInactive()->GetHeadPosition();
// while( !m_QueUser[ i ].GetListInactive()->IsEnd( pos ) )
// {
// CUser *pUser = m_QueUser[ i ].GetListInactive()->GetItem( pos++ );
// if( pUser )
// {
// TRACE(" %s\n", pUser->m_szUserID );
// }
// }
// }
//
// TRACE("==std::list=================================================================================\n" );
// std::list<CUser *> l1;
// l1.assign( m_QueUser[ 0 ].GetListInactive()->GetList()->begin(), m_QueUser[ 0 ].GetListInactive()->GetList()->end() );
// std::list<CUser *>::iterator iterEnd = l1.end();
// for( std::list<CUser *>::iterator iterPos = l1.begin(); iterPos != iterEnd; ++iterPos )
// {
// CUser *pUser = *iterPos;
// if( pUser )
// {
// TRACE(" %s\n", pUser->m_szUserID );
// }
// }
//
// TRACE("==std::vector=&=std::vector:random_shuffle()====================================================\n" );
// std::vector<CUser *> v1;
// v1.resize( l1.size() );
// std::copy( l1.begin(), l1.end(), v1.begin() );
// for( INT8 n = 0; n < RAND(v1.size()); n++ )
// std::random_shuffle( v1.begin(), v1.end() );
//
// std::vector<CUser *>::iterator vEnd = v1.end();
// for( std::vector<CUser *>::iterator vPos = v1.begin(); vPos != v1.end(); ++vPos )
// {
// CUser *pUser = *vPos;
// if( pUser )
// {
// TRACE(" %s\n", pUser->m_szUserID );
// }
// }
//
// TRACE("==END=================================================================================\n" );
// std::list<CUser *> l2(v1.begin(), v1.end()); // 다른 방법: std::copy(v1.begin(), v1.end(), std::inserter(l1, l1.begin()));
//
// m_QueUser[ 0 ].GetListInactive()->GetList()->clear();
// m_QueUser[ 0 ].GetListInactive()->GetList()->assign( l2.begin(), l2.end() );
//
// for( i = 0; i < 1; i++ )
// {
// CSync Sync( m_QueUser[ i ].GetListInactive()->GetSync() );
// CSyncList<CUser>::SYNC_POSITION pos = m_QueUser[ i ].GetListInactive()->GetHeadPosition();
// while( !m_QueUser[ i ].GetListInactive()->IsEnd( pos ) )
// {
// CUser *pUser = m_QueUser[ i ].GetListInactive()->GetItem( pos++ );
// if( pUser )
// {
// TRACE(" %s\n", pUser->m_szUserID );
// }
// }
// }
//
// l1.clear();
// l2.clear();
// v1.clear();
//////////////////////////////////////////////////////////////////////////
오라클 데이터베이스(Oracle Database) 11g 삭제하기
1. 내컴퓨터 (우클릭) -> 관리 -> 서비스 및 응용프로그램 -> 서비스 -> Oracle 로 시작하는 모든 프로그램 중지
2. 시작->실행->regedit 적고-> 레지스트리 편집기에서 아래 레지를 지우기
아래 폴더 안에 해당 레지가 존재하지 않는다면 무시
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services 에서 Oracle이라 시작하는 모든 것 삭제
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services 에서 Oracle이라 시작하는 모든 것 삭제
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 에서 Oracle이라 시작하는 모든 것
3. 내컴퓨터 (우클릭) -> 속성 -> 고급시스템설정 ->고급 -> 환경변수 -> 시스템 변수 아래에 있는 Path 편집
변수값에서 D:\app\product\11.2.0\dbhome_1\bin (사용자 컴퓨터에 따라 다를 수 있음)라 되어있는 내 DBhome의 bin 변수값을 삭제
4. C드라이브 -> Program files -> Oracle -> inventory 삭제
Oracle 폴더안에 inventory만 있다면 Oracle 폴더 전체 삭제
5. DB 폴더 삭제
만약 DB폴더가 D드라이버에 있는 app폴더에 저장되어 있으면이 폴더 전체를 삭제