Windows FLP(Fundamentals for Legacy PCs)

- 저사양 버전의 Windows XP로 구형 노트북등에도 설치가 가능하다.
  ( 펜티엄2 233Mhz 나 128MB 등등...매우 낮은 사양에서도 가능 )

- 기본적으로는 CD롬 설치만을 지원한다.
 ( 물론 인터넷을 뒤지면 시디롬 없이도 설치하는 방법들이 존재한다.

- 하드디스크에서 설치 ( 파티션 2개 )
  => FLP를 복사해두는 파티션이 반드시 주파티션이어야한다.
       ( 보통은 논리파티션인 경우가 많음, 파티션 지우고 새로 만들자.)

- 설치관련 팁

- 별도의 서비스팩3가 존재한다. ( 일반적인 XP 서비스팩은 안깔린다 )

- ATI 드라이버 설치에 실패할때
 regedit에서 ctrl+f(찾기)로 atievxx.exe를 찾아서,그게 들어있는 레지스트리 항목(ATI Hotkey poller)을 삭제한다. ( 두곳이 존재한다. )

Posted by 자갈공명

2010/08/22 11:24 2010/08/22 11:24
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/50

쫄지 마! 실전 매뉴얼이 여기 있잖아~

쫄지 마! 실전 매뉴얼이 여기 있잖아~

백업용..~

Posted by 자갈공명

2009/09/12 13:22 2009/09/12 13:22
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/40

공변 반환 규칙, 가상 상속

- 공변 반환 규칙 ( covariant return rule )

class Parent
{
public:
    virtual Parent* Clone() const { return new Parent(); }
};

class Child : public Parent
{
public:
    virtual Child* Clone() const { return new Chid(); }
};

이렇게 리턴값이 달라도 오버라이딩이 된다.

파생 클래스에서 오버라이드하는 함수의 타입은 기본클래스의 그 가상 함수의 타입과 같아야 한다. 단, 반환 타입 하나는 예외이다. C++에서는 원래의 반환 타입이 B*일 때 파생 클래스 쪽에서 오버라이드한 함수의 반환 타입이 D*이면 문제가 없다. 단, 여기에도 단서가 하나 붙는데 B는 D의 public기본 클래스여야 한다. ( B&, D&까지 허용된다.)
그러나 인자 타입에 대해서는 통하지 않는다.

출처 :  The C++ Programming Language ( p568 ~ 569 )

- 가상 상속 ( virtual inheritance )

class Storable { ... };
class Transmitter : public virtual Storable { ... };
class Receiver : public virtual Storable { ... };
class Radio : public Transmitter, public Receiver { ... };

 다중상속시 문제가 되는건 마름모( or 다이아몬드 )상속이다. goto문처럼 마름모상속은
죄악으로 여겨지기때문에 쓰게 되는 일이 거의 전무하다. 게다가 예전 책들중에 virtual 상속이란게 있다는걸 알려준 책도 없었다. 쓰지 말아야할 이유가 잔뜩...

 이것에 면죄부(?)를 주는 방식으로 기본클래스가 중복되는것을 방지해주는 방법
( 근데..쓸일 있을까...일단 뭔가 무서워...;;; )

출처 :  The C++ Programming Language 15.2.4( p533 )

ps..
TC++PL 이 몰랐던 사실들을 많이 알려줘서 좋긴한데...
가끔 뭐였지 뭐였지 하면서 막상 찾으려하면 찾기가 불편해서  답답함...;

Posted by 자갈공명

2009/04/08 22:36 2009/04/08 22:36
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/37

함수호출규약

 
 - 스택 저장순서
      pascal : 왼쪽에서 오른쪽

      cdecl : 오른쪽에서 왼쪽
      stdcall : 오른쪽에서 왼쪽

 -스택 복구책임
      pascal : 호출을 당하는 쪽이 스택공간을 삭제

      cdecl : 호출을 하는 쪽이 스택공간을 삭제

      stdcall : 호출을 당하는 쪽이 스택공간을 삭제

% fastcall
  : 처음 두개의 인수는 ecx, edx로 넘긴다. 그 이상의 인수는 stdcall과 같음

Posted by 자갈공명

2009/03/31 19:18 2009/03/31 19:18
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/35

명시적 타입 변환 ( 캐스팅 )

출처 : The C++ Programming Language ( 206p )

- static_cast
  : 관련이 있는 타입끼리의 변환을 수행한다.
    a. 같은 클래스계통안의 포인터타입끼리의 변환
    b. 정수타입을 나열자(enum)타입으로 변환
    c. 실수타입을 정수타입으로 변환

- reinterpret_cast
   : 관련되지 않은 타입 사이의 변환
    a. 정수를 포인터로 둔갑
    b. 가리키는 객체의 타입이 다른 포인터끼리 변환
   => 타입변환의 위험성을 고스란히 프로그래머가 책임져야함 ( 이식성도 않좋은편 )

- dynamic_cast
  : 런타임에 점검이 들어가는 변환
  : 주로 상속관계의 클래스들 사이에서 변환용도

- const_cast
  : const와 volatile 속성을 제거함

static_cast외에는 그닥 써보질 않아서 헤깔려서 정리해둠.. 허당이라고 해도 할말없음;

Posted by 자갈공명

2009/03/31 19:06 2009/03/31 19:06
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/34

구조체의 char data[1]의 역할은..?


이곳을 참조

요약하면...

1. 장점
  a. 파일쓰기등의 데이터저장시 구조체를 한번에 저장할 수 있다.
      ( 헤더와 데이터부분을 한방에 fwrite )
  b. 논란의 여지가 있겠지만 캐시미스를 줄일수 있다.

2. 단점
  a. 이런 글을 봐야할 정도로 코드가 바로 이해되지 않는다.

3. 왜 data[0]이 아니고 data[1]인가..
  => 일부 컴파일러의 에러 피하기

4. 1바이트가 남는것이 아닌가..?
 남는다. Align까지 생각하면 4바이트가 남을수도 있다. 하지만
 char data[1] 을 char *pData로 바꾸면..? 이때도 결국 4바이트가 쓰인다.
 피장파장...

이렇게 써본적도 없고, 앞으로도 있을까 싶긴하지만 알아둬서 나쁠건 없으니..
 

Posted by 자갈공명

2009/03/19 21:50 2009/03/19 21:50
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/31

Non Client 영역 칠하기 ( ex : 타이틀 바 )

 case WM_NCPAINT:
 case WM_NCACTIVATE:
  {
       HDC hDC = GetWindowDC( hWnd );
       if( hDC )
       {
            // 디폴트 리젼 제거 ( XP는 위쪽이 둥그니까.. )
            SetWindowRgn( hWnd, NULL, false );
            // Draw는 여기서..
            ReleaseDC( hWnd, hDC );
       }

        if( uMsg == WM_NCPAINT )
             return 0;
        if( uMsg == WM_NCACTIVATE )
             return TRUE;
  }
  break;

요는 WM_NCACTIVATE...
WM_NCPAINT는 쉽게 알게되는 반면에 WM_NCACTIVATE도 처리해줘야 한다는건
잘 안나온다. 비활성/활성으로 상태변경시 이 메세지가 오는데 이것도 처리해주지
않으면 다시 기본타이틀 모양으로 바뀌어 버린다. 그리고 WM_NCACTIVATE시에
리턴값이 TRUE여야 출력이외의 창간 우선순위처리들이 수행된다.

더 자세한것은 당연히 MSDN을..

Posted by 자갈공명

2008/12/08 16:23 2008/12/08 16:23
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/26

GoF Design Pattern 요약

사용자 삽입 이미지



사용자 삽입 이미지

Posted by 자갈공명

2008/04/12 17:20 2008/04/12 17:20
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/18

P/Invoke

닷넷에서 C나 C++로 작성한 DLL의 함수를 호출하려면 P/Invoke를 이용해야 합니다. 이것은 Interop이라는 일종의 서비스이데 직접 Native 코드를 호출하는 것과는 다릅니다. 당연히 속도도 직접 호출의 경우보다는 좀 떨어지겠죠. 그렇지만 기존에 작성된 코드를 사용할 수 있다는 점에서 유용합니다.

만약 C로 작성된 다음과 같은 함수가 MyDLL.dll에 있다고 해보죠.

int AddInteger(int a,int b)
{
    return a + b;
}


C#에서 이 함수를 호출하려면 다음과 같은 선언을 해줘야 합니다.

using System;
using System.Runtime.InteropServices; //P/Invoke를 하려면 이걸 선언해 줘야 합니다.

class PlatformInvokeTest
{
    [DllImport("MyDLL.dll")]  //만약 함수명이 다를 경우 EntryPoint="function_name" 을 지정해줘야 합니다.
    public static extern int AddInteger(int a,int b); 
    //외부에 정의된 함수이므로 extern을 지정해줘야 하고 static이어야 합니다.

    public static void Main()
    {
        int i = AddInteger(1, 2);
        Console.WriteLine(i);
    }
}


더 자세한 내용은
Calling Win32 DLLs in C# with P/Invoke

Posted by 자갈공명

2007/08/07 23:41 2007/08/07 23:41
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/14

C#과 C++ 사이의 interop

출처 : cafe.naver.com/monodevelop

C++클래스를 C#에서 직접 래핑을 할지 C++/CLI 를 써야할지 고민중인 요즘인데....
일단 확보한 C++ => C#방안..

계속적으로 수정될것이고 그 양도 방대해질건데...
C#이던 C++/CLI이던 상당한 노가다가 필요하다고 보여져서 망설여진다..

Step1

Step2

Step3

Posted by 자갈공명

2007/08/07 23:08 2007/08/07 23:08
Response
No Trackback , No Comment
RSS :
http://zagal.net/tt/rss/response/13