'c#'에 해당되는 글 27건

  1. 2008.02.29 차일드 컨트롤들의 열거...
  2. 2008.02.29 전역 변수, Properties
  3. 2008.02.29 ListView 데이터 바인딩..
  4. 2008.02.29 Xml 스키마, 클래스.
  5. 2008.02.29 ElementHost 윈어플과 WPF 어플간의 컨트롤 사용 2
  6. 2008.02.29 Dispatchertimer
  7. 2008.02.29 FileSystemWatcher 폴더내 파일 변화 감시
  8. 2008.02.13 Dll 로드시 자료형.. 1
  9. 2008.02.13 메세지 관련..
  10. 2008.02.13 C# 에서의 클래스 이름이란..?

차일드 컨트롤들의 열거...

Program/C# 2008. 2. 29. 14:27
< 환경 : WPF 프로젝, VS2008 >

WPF 윈도우 내의 그리드에 네임을 붙혀주고.. 해당 그리드의 칠드런에 접근하면 된다..
아래는 다수의 콤보박스의 크기를 일정하게 해주는 작업이고...
콤보박스의 이름이 "cbPost" 인 것은 제외 시킨다.

foreach (UIElement Combo in this.PageSettingGrid.Children )
            {
                if (Combo is ComboBox)
                {
                    if ((Combo as ComboBox).Name != "cbPost")
                    {
                        (Combo as ComboBox).SelectedIndex = 0;
                       
                        (Combo as ComboBox).Width = 40;
                        (Combo as ComboBox).Height = 20;
                    }
                }
            }

'Program > C#' 카테고리의 다른 글

클래스의 XML 문서화.  (0) 2008.03.05
전역 변수, Properties  (0) 2008.02.29
Num foramt 숫자의 출력 형식  (0) 2008.02.29
:

전역 변수, Properties

Program/C# 2008. 2. 29. 14:24

< 환경 : WPF 프로젝, VS2008 >

WPF프로젝에서 변수를 전역으로 사용할때
 APP 클래스 내부에 선언하면 되지만... 대략 인스턴스화 되지 않는 클래스로..
 변수를 스태틱으로 선언해야 한다.

또한 프로젝트 속성에 들어가 보면... 프로퍼티스에 리소스 탭을 볼 수 있는데...
이곳에 스트링이라던가.. 이미지 라던가.. 기타 등등의 리소스를 사용할 수 있는데..
이곳에 등록된 스트링 리스트를 코드 상에서 사용할때..

Properties.Resources.선언한변수

이런식으로 접근하면 된다.

'Program > C#' 카테고리의 다른 글

차일드 컨트롤들의 열거...  (0) 2008.02.29
Num foramt 숫자의 출력 형식  (0) 2008.02.29
ListView 데이터 바인딩..  (0) 2008.02.29
:

ListView 데이터 바인딩..

Program/C# 2008. 2. 29. 14:14

< 환경 : WPF 프로젝, VS2008 >

리스트 단위로 특정 데이터들을 보여줘야 하는 경우가 있죠..
그리드를 사용하면 편하겠지만, 아직 익숙치 않고 리스트 박스로도 충분히 가능할 듯 하여..
이번에 리스트 뷰를 사용해보았습니다.

C에서 넘어왔더니 ListView의 각 칼럼에 데이터를 바인딩 할 수가 있군요...
차근 차근 알아보겠습니다.

1. 바인딩할 데이터를 정하자.

클래스던, 구조체던 프로퍼티 요소를 바인딩 할 수가 있어 보입니다.
자세한 사항은 MSDN 검색..
클래스를 하나 정의해 보죠..
public class MyData
{
    int mA;
    int mB;
    bool mC;

}

2. 리스트뷰 칼럼 타이틀 정의
GridView Grdv = new GridView();
Lv.View = Grdv;         // 리스트뷰 내부적으로 그리드에 표현하네요..
           
GridViewColumn col = new GridViewColumn();      // 칼럼을 생성할 겁니다.
Binding Bind;             // 바인딩
MultiBinding MultiBind;  // 멀티 바인딩... 뒤에 소개하죠.

col = new GridViewColumn();
col.Header = "칼럼1";
col.Width = (double)Widths.post;    // 전 위드값을 열거형으로 정의 해놨군요..
MultiBind = new MultiBinding();
MultiBind.Bindings.Add(new Binding("mA"));  // 요렇게 프로퍼티 연결하죠?
MultiBind.Bindings.Add(new Binding("mB"));  //
MultiBind.Converter = new PostConvert();      // 컨버터 입니다. 자세한 사항은 뒤에 설명
col.DisplayMemberBinding = MultiBind;          // 바인딩 개체 컬럼에 연결하고
Grdv.Columns.Add(col); // 그리드에 컬럼 추가

col = new GridViewColumn();
col.Header = "칼럼2";
col.Width = (double)Widths.title;
col.DisplayMemberBinding = new Binding("mC");
Grdv.Columns.Add(col);

3. 자료의 추가..
여기서 바인딩된 프로퍼티를 소유하는 클래스
MyData 형 변수 data 가 있다할때
LV.Items.Add(data);
이렇게 애드하면 해당 프로퍼티 값이 추가 됩니다.

4. 바인딩
만약 data.mA = 1; data.mB = -1, data.mC = true;
이렇게 채우고 리스트 뷰에 애드 한다면 어떤 결과가 나올까요?
일단 칼럼2sms "true" 이렇게 표현될겁니다.
컬럼과 프로퍼티가 1/1로 바인딩 되었으니요..
하지만 위에 보듯이 칼럼 1에는 mA, mB 두개의 프로퍼티를 바인딩 해놨지요
보여질 컬럼은 하나이고 데이터는 2개이고.. 어떻해야 하나..?
이런 경우 컨버트 인터페이스를 사용 할 수 있습니다.

4. 컨버터
 : 실제 데이터인 프로퍼티와, 리스트 뷰에 보여지는 값사이의 데이터 변환..
MultiBind.Converter = new PostConvert();  이부분을 보시면 PstComvert 를 넘겨 주는걸 보실수 있습니다.
이 PostConvert가 IValueConverter 를 상속받아 제가 구현한 클래스 입니다.
IValueConverter를 상속받게 되면... 두개의 함수를 재정의 해줘야 하는데요..
   public object Convert(object value, Type type, object param, CultureInfo culture)
   프로퍼티값을 뷰에 표현해줄때..
   public object ConvertBack(object value, Type type, object param, CultureInfo culture)
   뷰의 값을 프로퍼티에 넣을때...

mC의값을 "true, false"가 아니니 "사용/미사용" 이런식으로 뷰에 보여주게 해주는 컨버터 입니다.
    class IsUseConvert : IValueConverter
    {
        public object Convert(object value, Type type, object param, CultureInfo culture)
        {
            String result = null;
            bool flag = (bool)value;
           
            if (str == true)
                result = "사용";
            else
                result = "미사용";

            return result;
        }
        public object ConvertBack(object value, Type type, object param, CultureInfo culture)
        {
            bool result = false;
            String Str = (String)value;

            if (Str.Equals(Properties.Resources.Uses))
                result = true
            else if (Str.Equals(Properties.Resources.UnUses))
                result = false;

            return result;
        }
    }

mA, mB의 경우 처럼 두개의 프로퍼티를 하나의 데이터로 바꿔야 하는경우..
IMultiValueConverter를 상속받은 클래스를 정의 하면됩니다.
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)

함수의 파라미터와 리턴 값을 보시면 object[] 배열임을 알 수 있습니다.
Convert 함수의 object 배열과 ConvertBack 리턴값 mA, mB의 값이... 오겠죠..?

'Program > C#' 카테고리의 다른 글

Num foramt 숫자의 출력 형식  (0) 2008.02.29
Xml 스키마, 클래스.  (0) 2008.02.29
ElementHost 윈어플과 WPF 어플간의 컨트롤 사용  (2) 2008.02.29
:

Xml 스키마, 클래스.

Program/C# 2008. 2. 29. 13:42

XML 문서의 내용을 메모리 상에 올려 관리 해야 할 때가 있습니다.
그냥 문서를 로드 해서 값의 변경 저장을 할 수 있겠지만...
이하 방법은 메모리 상에 클래스로 관리되는 것입니다.

<< VS2008 기준 >>
1. 스키마 생성..
VS 툴에서 XML 파일열기를 합니다.
XML 문서가 열리면 VS 툴 메뉴 바에 [XML] - [Create Schema] 메뉴가 생성됩니다.
스키마 생성후 저장...

2. 클래스 생성
스키마를 저장할때 확장자를 보시면 ".xsd"임을 알 수가 있습니다.
전 파일 이름을 test.xsd 이렇게 하겠습니다.
이를 가지고 클래스로 뽑아내야 하는데요...
이때 사용하는 것이 Xsd.exe 입니다.
전 커멘드 모드에서의 사용법을 설명 할 것입니다.
UI 모드도 있어 보이는데... VS 2008 RTM 모드에서 설치가 안되느군요...

VS툴 메뉴에 [Tools] -[ Visual Studio 2005 Command Prompt] 메뉴를 누르시면 도스 창이 생성됩니다.
커멘드 입력시 파일의 경로를 일일이 넣어주기 귀찮으니..
생성된 스키마 파일을 "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin"
이곳으로 옮겨주시고...
커멘드 창에서
XSD.exe /c /n:MyName test.xsd 이렇게 입력하시면 같은 폴더에 .cs 파일이 생성됩니다.
이렇게 하시면 xml을 담을수 있는 클래스 생성 끝..
/c : 클래스로 뽑아내라는..
/n : 네임스페이스..
기타 다른 명령어는 MSDN 검색 ~~`

3. 사용하기 XML 로드, 저장

            XmlSerializer serializer;
            TextReader reader;

                serializer = new XmlSerializer(typeof(생성된XML 문서의 클래스 명을 적어주세요~));
                reader = new StreamReader(XML 문서경로를 적어주세요);
                MyXmlClass = (캐스팅해주세요~)serializer.Deserialize(reader);
                reader.Close();
                reader.Dispose();

이런식으로 시리얼라이징 해서 사용하시고..
저장시에는 역순으로??

이러한 방법을 사용한 이유는 여러개의 XML 문서를 로드하여.. 조합하고 관리해야 하기 때문이였습니다.
하지만, 문제점은 스키마를 생성할때 XML 문서는 XML 구조를 모두 포함한 표본 문서여야 한다는 것입니다.
만약 이때의 스키마에서 조금이라도 틀어지는 ( 에트리뷰트가 추가되었다거나..) 문서일경우...
로딩 실패 에러를 내버립니다.. 소스상 try catch 필수겠죠;;;

지금 일반 텍스트 리더로 XML 문서를 로드하여.. 관리하고자 하는 노드들을 DataTable 에 보관하는 방법을 알아보고 있는데.. 문제는 여러 문서에서 뽑아낸 노드들을 통합하여 저장하는 것이안되는 군요...
방법을 아신다면 댓글 ㅡㅠㅡ



'Program > C#' 카테고리의 다른 글

ListView 데이터 바인딩..  (0) 2008.02.29
ElementHost 윈어플과 WPF 어플간의 컨트롤 사용  (2) 2008.02.29
Dispatchertimer  (0) 2008.02.29
:

ElementHost 윈어플과 WPF 어플간의 컨트롤 사용

Program/C# 2008. 2. 29. 13:28

C# 에서 윈도우 어플리케이션과 WPF 어플리케이션 프로젝트 간의 컨트롤 교차 사용을 가능하게 하는 클래스.

간단히 설명하면..

예를 들면 WPF폼 위에 elementhost 개체를 올린후 그 위에 윈폼 컨트롤을 올리는 겁니다.

< 윈도우 어플에 WPF 컨트롤 >
유져컨트롤은 c# 에서 생성할 수 있는 클래스로 이 위에 WPF 개체가 올라가 있습니다.


ElementHost host = new ElementHost();
    host.Dock = DockStyle.Fill;

    // Create the WPF UserControl.
    HostingWpfUserControlInWf.UserControl1 uc =
        new HostingWpfUserControlInWf.UserControl1();

    // Assign the WPF UserControl to the ElementHost control's
    // Child property.
    host.Child = uc;

    // Add the ElementHost control to the form's
    // collection of child controls.
    this.Controls.Add(host);


<< WPF 에서 윈 컨트롤 사용>>
윈도우 xaml 애트리 뷰트에
xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
위와 같은 네임 스페이스 추가후..
윈폼호스트 개체를 올려 놓은후 이하 차일드로 C# 개체를 올려 놓습니다.
<WindowsFormsHost Name="hostWinForm" HorizontalAlignment="Right" Width="228.64" Height="168.75" VerticalAlignment="Top" Margin="0,55,20,0">
            <wf:MonthCalendar Name="MCalendar" Dock="Left" DateChanged="MonthCalendar_DateChanged" ></wf:MonthCalendar>
        </WindowsFormsHost>

'Program > C#' 카테고리의 다른 글

Xml 스키마, 클래스.  (0) 2008.02.29
Dispatchertimer  (0) 2008.02.29
FileSystemWatcher 폴더내 파일 변화 감시  (0) 2008.02.29
:

Dispatchertimer

Program/C# 2008. 2. 29. 13:22
C# 에는 타이머가 3개(?정확히 기억이..) 정도 존재하는 걸로 기억하는데
그중 하나인 DispatcherTimer 입니다.


//  DispatcherTimer setup
dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();

The Tick event handler updates a Label that displays the current second, and it calls InvalidateRequerySuggested on the CommandManager.

//  System.Windows.Threading.DispatcherTimer.Tick handler
//
//  Updates the current seconds display and calls
//  InvalidateRequerySuggested on the CommandManager to force 
//  the Command to raise the CanExecuteChanged event.
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    // Updating the Label which displays the current second
    lblSeconds.Content = DateTime.Now.Second;

    // Forcing the CommandManager to raise the RequerySuggested event
    CommandManager.InvalidateRequerySuggested();
}
:

FileSystemWatcher 폴더내 파일 변화 감시

Program/C# 2008. 2. 29. 13:17
출처 : http://1978.tistory.com/ 

예전에 C 에서 이와 같은 기능을 구현 하려고 애먹었던 기억이 나는군요..
C# 이런면에서 정말 편합니다. ㅎㅎ


파일 시스템 변경 알림을 수신하면서 디렉터리 또는 디렉터리의 파일이 변경되면 이벤트를 발생시킵니다.

이 형식의 전체 멤버 목록을 보려면 FileSystemWatcher 멤버을(를) 참조하십시오.


스레드로부터 안전한 방식

이 형식의 모든 public static(Visual Basic에서는 Shared) 멤버는 스레드로부터 안전합니다. 하지만 인스턴스 멤버는 스레드로부터 안전하지 않습니다.

설명

FileSystemWatcher를 사용하여 지정된 디렉터리의 변경 내용을 조사합니다. 지정된 디렉터리에 있는 하위 디렉터리 및 파일의 변경 내용을 조사할 수 있습니다. 구성 요소는 로컬 컴퓨터, 네트워크 드라이브, 또는 원격 컴퓨터에 있는 파일을 조사할 수 있습니다.

참고    FileSystemWatcher 에서는 전환되거나 제거되지 않은 디스크도 조사할 수 있습니다. 타임스탬프 및 속성은 변경될 수 없으므로 FileSystemWatcher 는 CD와 DVD에 대한 이벤트는 발생시키지 않습니다. 구성 요소가 올바르게 작동되도록 하려면 원격 컴퓨터에 이러한 플랫폼 중 하나가 설치되어 있어야 합니다. 하지만 Windows NT 4.0 컴퓨터에서 원격 Windows NT 4.0 컴퓨터를 조사할 수는 없습니다.

모든 파일의 변경 내용을 조사하려면 Filter 속성을 빈 문자열("")로 설정하고 특정 파일을 조사하려면 Filter 속성을 파일 이름으로 설정합니다. 예를 들어, MyDoc.txt 파일의 변경 내용을 조사하려면 Filter 속성을 "MyDoc.txt"로 설정합니다. 특정 형식의 파일에 대한 변경 내용을 조사할 수도 있습니다. 예를 들어, 텍스트 파일의 변경 내용을 조사하려면 Filter 속성을 "*.txt"로 설정합니다.

참고   숨김 파일도 조사됩니다.

디렉터리나 파일에 대해 여러 형식의 변경 내용을 조사할 수 있습니다. 예를 들어, Attributes, LastWrite 날짜 및 시간, 또는 파일이나 디렉터리 Size의 변경 내용을 조사할 수 있습니다. FileSystemWatcher.NotifyFilter 속성을 NotifyFilters 값 중 하나로 설정하면 이를 수행할 수 있습니다. 조사할 수 있는 변경 내용의 형식에 대한 자세한 내용은 NotifyFilters를 참조하십시오.

파일이나 디렉터리의 이름 바꾸기, 삭제, 또는 만들기를 조사할 수 있습니다. 예를 들어, 텍스트 파일의 이름 바꾸기를 조사하려면 Filter 속성을 "*.txt"로 설정하고 제공된 WatcherChangeTypes 값인 Renamed를 사용하여 WaitForChanged 메서드 중 하나를 호출합니다.

참고   공용 파일 시스템 작업은 여러 이벤트를 발생시킬 수 있습니다. 예를 들어, 파일이 한 디렉터리에서 다른 디렉터리로 이동될 경우 여러 개의 OnChanged 및 몇몇 OnCreatedOnDeleted 이벤트가 발생할 수 있습니다. 파일 이동 작업은 여러 개의 간단한 작업으로 구성된 복합 작업이기 때문에 여러 이벤트를 발생시킵니다. 마찬가지로, 일부 응용 프로그램(예: 바이러스 백신 소프트웨어)은 FileSystemWatcher에서 감지하는 추가 파일 시스템 이벤트를 발생시킬 수 있습니다.

시스템에서는 구성 요소에서 수행되어 응용 프로그래밍 인터페이스에 전달된, 버퍼에 있는 파일 변경 내용을 구성 요소에 알립니다. 짧은 시간에 변경 내용이 많은 경우 버퍼가 오버플로될 수 있습니다. 이로 인해 구성 요소는 디렉터리 변경을 추적하지 않게 되며 빈 알림만 제공하게 됩니다. 버퍼는 디스크에 스왑할 수 없는 페이징되지 않은 메모리를 사용하므로 버퍼 크기를 증가시키는 것은 리소스가 많이 소모되는 작업입니다. 따라서 버퍼를 가능한 한 작게 유지하는 것이 좋습니다. 버퍼 오버플로를 방지하려면 NotifyFilterIncludeSubdirectories 속성을 사용하여 원하지 않는 변경 알림을 필터링합니다. 버퍼 크기에 대한 자세한 내용은 InternalBufferSize를 참조하십시오.

참고    Filter를 설정해도 버퍼로 들어가는 항목이 줄어들지는 않습니다.

FileSystemWatcher 인스턴스의 초기 속성 값 목록은 FileSystemWatcher 생성자를 참조하십시오.



[C#]
public class Watcher
{

    public static void Main()
    {

        string[] args = System.Environment.GetCommandLineArgs();

        // If a directory is not specified, exit program.
        if(args.Length != 2)
        {
            // Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)");
            return;
        }

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = args[1];
        /* Watch for changes in LastAccess and LastWrite times, and
           the renaming of files or directories. */
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        // Only watch text files.
        watcher.Filter = "*.txt";

        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Renamed += new RenamedEventHandler(OnRenamed);

        // Begin watching.
        watcher.EnableRaisingEvents = true;

        // Wait for the user to quit the program.
        Console.WriteLine("Press \'q\' to quit the sample.");
        while(Console.Read()!='q');
    }

    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        // Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
    }

'Program > C#' 카테고리의 다른 글

Dispatchertimer  (0) 2008.02.29
Dll 로드시 자료형..  (1) 2008.02.13
메세지 관련..  (0) 2008.02.13
:

Dll 로드시 자료형..

Program/C# 2008. 2. 13. 16:49
C, C++ 로 만들어진 DLL 들을 로드 할때 자료형을 맞추는 일은 처음 하시는 분에게는 까다로운 일이 아닐겁니다.

제 경험상 까다로운 몇몇의 자료형 들에 대해서 예를 들어 보겠습니다.

HWND >> int
    ( 이 인트값은 C# 에서 구해진 IntPtr의 .ToInt32() 변환값으로 채워질 것입니다)
WChar *  >>  [MarshalAs(UnmanagedType.LPWStr)]String
    ( 이는 C# 에서 문자열로 채워질 것입니다)


Marshal 이라는 것 상당히 흥미로운데요..
간단히 알아본봐 Managed & Unmanaged Code 사이의 데이터 타입을 정렬하다..? 라는 군요..

실제로 Marshal 이라는 클래스를 보면 .C++에서 사용되는 자료형들(대표적으로 포인터) 등을
C# 에서도 사용가능하도록 자료형을 맞춰주는 군요...
간단히 몇가지 함수를 보면.. 파라미터는 MSDN 참고 해주시고..
Marshal.PtrToStructure(...)  >> 파라미터러 넘어온 포인터를 구조체 객체로 바꿔주죠...
Marshal.PtrToStringUni(...)  >> 파라미터로 넘어온 포인터를 유니코드 스트링으로 바꿔줍니다.

'Program > C#' 카테고리의 다른 글

FileSystemWatcher 폴더내 파일 변화 감시  (0) 2008.02.29
메세지 관련..  (0) 2008.02.13
UnSafe 컴파일 옵션..  (0) 2008.02.13
:

메세지 관련..

Program/C# 2008. 2. 13. 16:39
# 키보드 입력 관련된 사용 예
   KeyPressEventArgs e
   e.KeyChar == (char)27

# Win32 메세지 사용예
   const int WM_COPYDATA = 0x4A

# 메세지 후킹
protected override void WndProc(ref Message m)
{
      if( m.Msg == WM_COPYDATA)
      {

'Program > C#' 카테고리의 다른 글

Dll 로드시 자료형..  (1) 2008.02.13
UnSafe 컴파일 옵션..  (0) 2008.02.13
C# 에서의 클래스 이름이란..?  (0) 2008.02.13
:

C# 에서의 클래스 이름이란..?

Program/C# 2008. 2. 13. 16:32

C# 프로그래밍 도중.. C#으로 만들어진 폼을 다른 언어에서 찾아야 하는 경우가 있었습니다.

당연히 FindWindow API 를 이용하여 클래스 일므으로 해당 폼을 찾는걸 시도했는데..

안찾아지더군요..

이 문제로 몇일동안 고생 했던 것 같습니다..

원인은.. C# 에서는 Form 클래스를 상속받아서 폼을 만들었을경우..

프레임 웤이 자동적으로 클래스 이름을 지정합니다.

예를 들어 제가 MyClass 라고 폼을 생성하여도 23443DW34-234dDDQ  꼭.. GUID 처럼.. 말이죠..

Form 클래스를 상속 받았을 경우.. 클래스 이름으로는 폼을 찾을 수가 없다는 것이 결론이였습니다.

시간이 없는 관계로 다른 방법으로 폼을 찾았지만..

꼭 클래스 이름으로 찾아야 한다면 NativeWindow 라는 클래스에 대해서 알아보시기 바랍니다.

'Program > C#' 카테고리의 다른 글

UnSafe 컴파일 옵션..  (0) 2008.02.13
시스템 / 프로세스 메모리 구하기  (0) 2008.02.02
C# 에서 Win32 함수 쓰기.. C# C++ 자료형 비교  (0) 2008.01.17
: