일단 Unix호환 어플리케이션(커맨드 라인 툴 포함)은 전부 Xcode에서 개발, 빌드 및 실행과 디버깅 까지 가능며 몇가지만 알고 계시면 정말 쉽게 이용하실 수 있습니다. 예전에 Unix 어플리케이션 개발을 할때는 KDevelop을 주로 이용했습니다만 맥을 사용한 이후로는 그럴 필요가 없을 정도로 아주 편리하다고 하겠습니다.

먼저 왠만한 Unix프로그램은 처음에 프로젝트 생성하실 때 New Project에서 Command Line Utility 밑의 Standard Tool을 선택하여 프로젝트를 생성하시는 것으로 해결이 됩니다. 지금 올려주신 화면을 보았을 때 unistd.h의 getpid()를 사용하시는 것 같아서 그것만 간단히 pid를 찍는 프로그램을 만들어 봤는데 아무런 설정 없이 잘 컴파일 되고 동작했습니다.

문제는 스탠다드 라이브러리가 아닌 다른 라이브러리를 이용할 때인데, 이 때는 손품을 좀 팔아 주시면 됩니다. Xcode의 메인 프로젝트 창의 왼쪽 Groups & Files의 최상위에 위치한 프로젝트 항목을 오른쪽 클릭하고 Get Info 윈도우를 띄운 다음 Build 탭을 보시면 프로젝트를 빌드하는데 사용되는 각종 옵션들이 많이 있습니다. gcc로 개발을 해 보셨으면 아시겠지만 외부 라이브러리를 이용할 경우 -I, -L, -l 등의 옵션이 반드시 들어가게 됩니다. (순서대로 대문자 아이, 대문자 엘, 소문자 엘 입니다.) 이 옵션이 컴파일러와 링커에게 헤더와 라이브러리 패스 및 링크할 라이브러리를 일러주는데 이 옵션 역시 Build 탭 안에 있습니다.

-I (대문자 아이)와 -L은 Search Path 하위 항목을 보시면 쉽게 찾으실 수 있습니다. (Xcode 2에서는 앞의 하이픈과 옵션까지 적어줬던 것으로 기억하는데 3에서는 잘 모르겠습니다.) 또한 -l의 경우는 (소문자 엘) Linking 밑의 Other Linker Flags에 적어주시면 됩니다.

예를 들어 X11 라이브러리를 이용할 경우
-I/usr/X11/include -L/usr/X11/lib -lx11
gcc에 위와 같은 옵션을 주게 되는데 각각 앞에서 말씀드린 항목에 예쁘게 정자로 적어 주시면 되겠습니다.

그리고 실행에 대한 말씀을 하셨는데 그냥 Run하면 실행됩니다. 혹시 실행 위치라던가 하는 부분도 역시 프로젝트 옵션에서 정해줄 수 있고요, 만약 콘솔이 보고 싶으신 것이라면 Run 메뉴 밑의 Console을 선택하시면 됩니다.

PS) 예전엔 프로젝트 생성하자마자 ZeroLink를 끄는 게 일이었는데 언제부턴가 디폴트로 꺼져 나오더니 3 부터는 아예 안 쓰는 쪽으로 가기로 했나 봅니다.
Posted by 배고파씨

1, Microsoft Loopback adapter 설치

시작 -> 제어판 -> 하드웨어 추가 를 누릅니다.

그곳에서 처음 다음을 누르시고, 컴퓨터가 하드웨어를 검색 할 것입니다.

그러면 그곳에서 이미 하드 웨어를 연결했냐고 물을껀데, 그럴 경우 했다고 하고 다음을 누릅니다.

그러면 목록에서 하드웨어 장치를 선택하라고 하는대, 맨밑의 새 하드웨어 장치 추가 을 누르십시요.

그리고 목록에서 직접 선택한 하드웨어 설치를 누르시고

다음엔 네트워크 어뎁터를 클릭하세요. 그리고 난 후에 제작사 리스트에서 'Microsoft' 에 있는 Microsoft Loopback Adapter 를 선택하고 설치를 하면 됩니다.

 

2, 네트워크 연결 관리자로 들어간다.

'로컬 영역 연결 2'란 이름으로 생성이 되어있는 것을 볼 수 있다.

등록정보에서 IP를 직접 입력한다.

 

ip :: 10.10.10.10

subnetmask :: 255.255.255.0

을 입력한다.

 

3, ORACLE10G를 다시 설치 하면 성공적으로 설치 완료

Posted by 배고파씨

Windows Vista에서 공식적으로 지원되는 Visual Studio 버전은 2005 이상입니다.
하지만 2005 버전에서도 호환성 문제가 발생 합니다.
이에 대한 패치는 Visual Studio 2005 서비스팩1과 비스타용 서비스팩 1 업데이트를 설치하면 해결될 수 있습니다.

Posted by 배고파씨

Visual Studio 6.0은 XP나 Vista에서 설치가 되지 않는 경우가 있습니다.
이미 10년(정확한 출시일은 모르겠네요 10년쯤 된듯..)이나 된 개발툴을 아직도 써야 한다는 현실이 우울한거지
최신OS인 XP와 Vista를 탓할 문제는 아닌듯 합니다.
아무튼 MS의 KB에서 방법을 제시하고 있지만 방법이 너무 복잡하고 그마저도 않된다는 사람들이 많습니다.

서치를 하다 발견한 어느분 블로그에 나와 있는 방법을 소개 합니다.
바로 수동으로 설치 하는 방법 입니다.

X:\SETUP\ACMSETUP.EXE /T VS98Ent.STF /S X:\ /n "" /o "" /k "YYYYYYYYYY" /b1

여기서 X는 CD 드라이브의 문자, YYYYYYYYYY는 CD키 입니다. CD키는 하이픈(-)은 생략 합니다.

이렇게 실행을 했는데 "먼저 설치 마법사를 실행해야 합니다" 라는 메세지가 나온다면 다음 내용처럼 레지스트리 파일을 만들어서
레지스트리에 해당 내용을 추가해 주면 됩니다.
레지스트리 파일을 만드는 방법은 아래 내용을 테스트 편집기를 이용해서 파일로 저장하면 되는데 확장명을 .reg로 저장 하면 됩니다.
그리고 저장된 이 파일을 더블 클릭해서 실행하면 레지스트리에 내용이 추가 됩니다.

아래는 레지스트리 파일 내용 입니다.


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0\Setup]
"VsCommonDir"="C:\\Program Files\\Microsoft Visual Studio\\Common"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0\Setup\Visual Studio 98]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0\Setup\Visual Studio 98\SetupWizard]
"aspo"=dword:38395356
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0\Setup\Visual Studio 98\SetupWizard-1033-ENT]
"heuristics"=hex:00,00,00,00,00,00,00,00

원문 출처는 http://eyefocus.byus.net/tt/180 입니다.
Posted by 배고파씨

Visual C++ 팀이 Visual C++를 사용하는 개발자 분들이 Internet Explorer 8 설치 후에 겪는 문제에 대해 블로그를 통해 우회 방법을 소개했습니다. 방법은 아래와 같습니다.

- regedit 실행

- “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet
Settings\Zones”에서 “1000” 키 생성

- DWORD 엔트리 생성 (Name=1207, Type=REG_DWORD, Data=0x000000)

Visual C++ 사용하는 개발자가 Internet Explorer 8을 설치하고 나서, Visual Studio에서 마법사를 통해 함수 추가, 변수 추가, Smart Device 프로젝트 생성, Smart Device 클래스 추가 등과 같은 것을 실행할 때 예기치 않은 메시지와 함께 제대로 동작하지 않는 문제가 있습니다. Internet Explorer의 custom security manager 처리에서 순조롭지 않은 일이 발생했다고 하는데, 좀 더 자세한 것은 지켜봐야겠습니다.

Visual C++ Team Blog: http://blogs.msdn.com/vcblog/archive/2009/03/28/some-vs2005-and-vs2008-wizards-pop-up-script-error.aspx

IE8 설치 후 Visual Studio에서 변수 추가 실패.doc

Posted by 배고파씨

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters
에 새로만들기 -> DWORD값 선택

이름은 TCPNoDelay 값은 16진수(1)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
에 새로만들기 -> DWORD값 선택

이름은 TcpAckFrequency 값은 16진수(1)

Posted by 배고파씨



이와 같이 버튼을 누르면 메뉴가 펼쳐지는 버튼을 많이 보아 왔을 것 입니다.
Visual Studio 2008에 포함되어 있는 MFC Feature Pack에서 이와 같은 기능을 구현 하는 방법을 설명 하겠습니다.

이 기능은 AFX_WM_RESETTOOLBAR 메세지 핸들러를 이용해서 처리 합니다.
이 메세지는 도구모음이 초기화 될때 발생 하는데 MFC Feature Pack의 구조가 메뉴나 도구모음등의 사용자 인터 페이스의
변경 사항을 레지스트리에 저장해 두었다가 그 값을 로드해서 인터페이스를 표시 하기 때문에 소스를 수정해서 인테페이스를 수정 하더라도 레지스트리의 값을 우선 하기 때문에 적용이 되지 않습니다.

그래서 도구모음을 초기화 시키면 발생하는 메세지를 이용해서 처리 하는게 가장 매끄럽다고 생각 됩니다.

그런데 불행이도 AFX_WM_RESETTOOLBAR 메세지 핸들러는 Visual studio에 기본으로 등록 되어 있지 않기 때문에
직접 코딩을 해서 등록 해야 합니다.

CMainFrame 클래스에 메세지 핸들러의 원형과 메세지맵을 등록합니다.

(MainFrm.h)

protected:
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 afx_msg void OnViewCustomize();
 afx_msg LRESULT OnToolbarCreateNew(WPARAM wp, LPARAM lp);
 DECLARE_MESSAGE_MAP()

 afx_msg LRESULT OnResetToolBar(WPARAM wParam, LPARAM lParam);


(MainFrm.cpp)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
 ON_WM_CREATE()
 ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
 ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
 ON_REGISTERED_MESSAGE(AFX_WM_RESETTOOLBAR, OnResetToolBar)
END_MESSAGE_MAP()

그리고 메세지 핸들러의 함수인 OnResetToolBar에 우리의 목적인 드롭다운 버튼을 생성하는 코드를 작성 하면 됩니다.

(MainFrm.cpp)

LRESULT CMainFrame::OnResetToolBar(WPARAM wParam, LPARAM lParam)
{
 // wParam을 통해서 리셋되는 도구모음의 리소스 ID가 전달 됩니다.
 // 리소스 ID값을 검사 하여 리셋되는 도구모음에 따라서 다른 코드를 적용 하면 됩니다.
 UINT uID = (UINT)wParam;
 if (uID == IDR_MAINFRAME_256)
 {
  CMenu MainMenu;
  MainMenu.LoadMenu(IDR_MAINFRAME);
  CMenu* pMenu = MainMenu.GetSubMenu(0);

  // 도구 모음의 버튼을 다른 스타일로 대체 합니다.
  // 여기서 CMFCToolBarButton의 파생 클래스인 CMFCToolBarMenuButton을 이용해서 메뉴가 있는 드롭다운 버튼으로 대체 합니다.
  m_wndToolBar.ReplaceButton(ID_FILE_NEW, CMFCToolBarMenuButton((UINT)-1, *pMenu, 0, _T("Drop-down button")));
 }
 return 0;
}





어떤가요? 간단 하지 않습니까? ㅎㅎ
들인 노력에 비하면 결과가 만족 스럽다고 할 수 있네요. MFC Feature Pack이 버그도 좀 있고 MS에서 개발한게 아니라 이미 판매되고 있는 다른 회사의 제품을 포함한 것이어서 좀 아쉽기는 하지만 그래도 나름대로 쓸만 하더군요.
Posted by 배고파씨

Exported-color-2009-05-08.vssettings


비주얼 스튜디오의 폰트와 배경색을 터미널의 화면 처럼 검정색 바탕으로 꾸며 봤습니다.
흰색 바탕도 괜찮지만 클리어 타입 폰트들의 가독성도 검정 바탕에서가 더 좋은거 같고
일단 뭔가 있어 보입니다 ㅋㅋㅋ

비주얼 어시스트를 사용 하신다면 추가 color 설정을 디폴트 버튼을 누르면 검정색용 디폴트 컬러로 마춰 질겁니다.
비주얼 어시스트가 디폴트 컬러를 2가지를 가지고 있더군요.
그리고 일부 설정을 조금만 손보시면 뭔가 있어 보이는 코딩 화면을 쓰실 수 있습니다. ㅎㅎㅎ

Posted by 배고파씨

이번에 나온 리본 UI를 지원하는 Feature Pack은 BCGSoft에서 이미 판매 중인 BCG Library를 가져다 쓴것이라고 합니다.
그런데  메뉴 폰트 크기가 1 pixel 작아서 좀 어색해 보이는데요. 이번에 추가된 afxGlobalData 라는 전역 객체가 있습니다.
이것을 이용해서 메뉴 폰트를 수정 할 수 있습니다.

아래 코드는 시스템의 파라메터에서 시스템의 폰트크기를 가져와서 메뉴 폰트 크기를 수정하는 코드를 추가한 내용 입니다.

(MainFrm.cpp)

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
  return -1;

// 이 부분 추가
 LOGFONT logfont = {0};
 ::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &logfont, 0);
 afxGlobalData.SetMenuFont(&logfont, TRUE);


참고로 아래는 데브피아에 올라와 있던 코드 입니다.
폰트의 정보를 시스템파라메터에서 가져오지 않고 직접 설정 하는 예제 입니다.

(MainFrm.h)
...
LOGFONT m_lf;
...

(MainFrm.cpp)

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
    return -1;
 
  //이부분을 추가 (사용할때는 함수를 만들어 처리할것)
 memset(&m_lf, 0, sizeof(LOGFONT));
 m_lf.lfCharSet = 0x81; // 한글 Character Set
 m_lf.lfHeight = 12; // 12 point 크기
 wcscpy_s(m_lf.lfFaceName, _T("굴림"));
 afxGlobalData.SetMenuFont(&m_lf, TRUE);
...

Posted by 배고파씨

const로 정의된 상수에 포인터를 사용할 수 있다. 이때 포인터는 const의 위치에 따라 다르게 처리된다.

1) const 객체에 대한 포인터
일반적인 포인터는 가리키는 객체의 값을 바꿀 수 있다. 하지만 const 객체를 가리키는 포인터는 해당 객체의 값(const 값)을 바꾸지 못한다. c++에서 const 객체를 가리키는 포인터는 대상의 const 성질을 따르도록 하여 이런 특징을 강제한다.

const double *cptr;  // cptr은 const인 double을 가리킬 수 있다.

2) const 포인터
const에 대한 포인터 외에  추가로 const 포인터도 있다. 즉 자신의 값을 바꿀 수 없는 포인터를 의미한다.

int errNumb = 0;
int *const curErr = &errNumb  // curErr은 상수(const) 포인터 이다.

이 정의를 오른쪽에서 왼쪽으로 읽으면 'curErr은 const 포인터이고 int 타입 객체를 가리킨다.'는 것을 알 수 있다.
다른 const와 마찬가지로, const 포인터는 자신의 값을 바꿀 수 없다(즉 다른 객체를 가리키도록 할 수 없다.)

Posted by 배고파씨