블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2819)
Unity3D (870)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (236)
협업 (63)
3DS Max (3)
Game (12)
Utility (140)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (52)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

세가지의 라이브러리나 어셈블리를 혼합해서 사용 할 경우 기본 셋팅으로는 디버깅 시 C++  라이브러리 쪽으로 진입이 불가능 하다.

C# 프로젝트 속성 -> 디버그 탭 -> 디버거 사용 -> '비관리 코드 디버깅 사용'

C++ 프로젝트 속성 -> 디버깅 -> 디버거 형식 -> '혼합'

으로 수정 해준다.

반응형
Posted by blueasa
, |

좀 긴가민가했던 .NET core 관련 내용을 정리하다가, 올바른 unmanaged 리소스 청소법을 위한 '지저분하기 짝이 없는, 그러나 반드시 알아야 하는' Finalize, IDisposable에 다다랐는데, 흥미롭게도 C# 쪽 pattern과 C++/CLI 쪽 pattern이 (적어도 표면 상으로는) 완연히 다르다는 사실을 발견.
본 사항은 정상적 application 구현을 위해서는 반드시 숙지해야 할 내용인데, 언어 별로 그리도 달라서야 원. 게다가, C++/CLI 쪽 MSDN 설명은 뭔가 하나 빠진 듯 하여 다 읽고 나서도 제대로 이해가 가질 않는다. 언어 별로 따로 익혀야 하는 것도 거시기한데, 설명이라도 제대로 해야지.

먼저, C#쪽 pattern. MSDN에 떡하니 올라와 있는 정형화된 pattern이다.

// 기반 클래스에서의 구현 pattern
public class Base: IDisposable
{
  
public void Dispose()
   {
    
 Dispose(true);


  // GC가 Finalize 호출하지 않도록 (중복호출 배제)

      GC.SuppressFinalize(this);
   }
 

   // disposing 플래그를 통해 Finalize에서 managed 리소스

   // 정리하지 않도록(해당 리소스는 GC 정리할 것임)

   protected virtual void Dispose(bool disposing)
   {
     
if (disposing)
      {
        
// Managed 리소스 정리
      }
     
// Unmanaged 리소스 정리
   }

  
// C# 소멸자. Finalize 메서드임
   ~Base()
   {
     
// 단순히 Dispose(false).
      Dispose (
false);
   }
}
// 파생 클래스에서의 구현 pattern
public class Derived: Base
{  
  
protected override void Dispose(bool disposing)
   {
     
if (disposing)
      {
        
// managed 리소스의 정리
      }
     
// Unmanaged 리소스 정리

      // 부모 개체의 리소스를 정리하도록

      base.Dispose(disposing);
   }
  
// 파생 클래스에서는 소멸자 정의를 하지 않음(부모 소멸자

   // 에서 재정의된 Dispose 호출할 것이므로)

}

암만 봐도 복잡하기 짝이 없는 패턴. 하지만 이보다 더 단순한 패턴을 내 머리로 만들어낼 궁리는 안한다(나올 가능성도 거의 없겠지만). 다음은 상기 사항에 대한 C++/CLI 쪽 pattern. 이 역시 MSDN에 명시된 내용이다.

ref class A {
   // Dispose() 해당하는 소멸자. delete를 통해 명시적 호출 가능.

   // Native C++ 가상 소멸자와 동일한 행동 양식

     // (스택 기반 semantic 개체 생성 , 자동 호출됨)

   ~A() {
      // managed 리소스 제거

        // ...

      // finalizer 통한 unmanaged 리소스 제거
      this->!A();

   }

   // Finalize에 해당하는 Finalizer
   !A() {

 // unmanaged 리소스 제거

   }
};

MSDN에는 몇몇 설명으로 위 C++/CLI의 패턴을 설명하다 마무리 짓는데, 상당히 난감해진다. 패턴은 왜 달라지는지, 달라지면서 없어진 GC.SupressFinalize(), Dispose(bool)은 어디로 갔는지 등에 대한 설명은 없거나 부실하다. 게다가 파생 클래스에 대한 언급은 아예 없어 과연 위 내용이 올바른 내용인가하는 의심까지 들 정도.

다음은 위 패턴에 대한 MSDN에 없는 내용으로서, 이와 같은 의문을 해소할 key가 되는 사항이다(C++/CLI의 기본 개념에 대해서는 MSDN 및 C++/CLI 소개글(번역문 링크) 참조).
1. C++/CLI에서의 소멸자는 virtual 키워드가 없더라도 무조건 가상 함수이다.

2. finalizer의 가시성 범위는 accessor가 있건 없건 private이다.

3. destructor와 finalizer가 IDisposable::DisposeFinalize()를 완전 대체하지는 않는다. 컴파일러는 IL 코드 내에 Dispose()Finalize()를 따로 삽입하며, 각기 내부에서 destructor와 finalizer를 적절히 호출한다.

4. destructor가 호출되면 finalizer는 호출되지 않는다. 이는 IL 코드 내 Dispose() 구현에서 GC.SupressFinalizer()를 호출하기 때문이다.

5. 위 코드를 기반으로 한 컴파일된 IL 코드는 C# 버전과 거의 흡사하다(Dispose(bool)을 통한 파생 클래스에서의 리소스 정리 등).

6. 위와 같은 내용을 기반으로, 파생 클래스에서 역시 위 패턴과 동일하게 작성하면 된다(destructor 또는 Finalizer 등에서 base 클래스의 destructor/finalizer 명시적 호출 등 부가적 행동 불필요).
위의 결론은 김형준님의 C++/CLI의 Dispose Pattern에 대한 고찰과 유사한 실험 및 생성된 IL 코드 분석을 통해 이루어졌다.

반응형
Posted by blueasa
, |
obj
error LNK2019:
__imp__
@16 외부 기호
(참조 위치:
@4 함수)에서 확인하지 못했습니다.

위와 같은 에러가 나면 소스에 다음을 첨가하세욤~ ㅎㅎ

#pragma comment(lib, "user32.lib")


반응형

'Programming > C++/CLI' 카테고리의 다른 글

C# + CLI + C++ 혼합 디버깅  (0) 2010.06.01
C#과 C++/CLI의 Finalize, IDisposable Pattern 차이  (1) 2010.06.01
C#에서 Native C++ 프로젝트 사용하기  (0) 2010.05.31
마샬링(Marshaling)  (0) 2010.05.27
System::String 관련  (0) 2010.05.26
Posted by blueasa
, |

Wrapping을 이용해 C#에서 Native C++ 프로젝트 사용하기

 

Lib 프로젝트 생성

Native C++에 해당하며, 실제 프로그램 로직등은 이곳에 속해있다.

간단하게 Framework 클래스를 만들어보자.

 

  1. class CFramework
    {
    public:
            void Create( HWND hwnd )
            { 
                    // 핸들을 받아 D3D 디바이스 생성
            }
    };

 

DLL 프로젝트 생성

프로젝트 속성에서 공용 언어 런타임 지원을(/clr) 설정해준다.

위에 작성한 프로젝트를 빌드 후 나오는 Lib 파일을 불러오고, 헤더를 추가해준다.

랩핑 클래스를 작성하고, 랩핑할 클래스의 객체를 선언 후 사용하면 된다.

밑의 코드에서 CFramework의 Create함수를 랩핑하고 있다.

 

  1.  // 엔진의 정적 라이브러리
    #ifdef _DEBUG
    #pragma comment ( lib, "Engine_d.lib" )
    #else
    #pragma comment ( lib, "Engine.lib")
    #endif

    // 랩핑 클래스 구현
    #pragma once
    #include "Framework.h" // 랩핑할 Native C++ 클래스 헤더를 참조

    using namespace System;
    namespace CWrapper {

            public ref class CFrameworkWrapper
            {
            public:
                    CFrameworkWrapper();
                    ~CFrameworkWrapper();

            public:
                    void Create( IntPtr hWnd )
                    {
                            m_hHwnd = (HWND)hWnd.ToInt32();

                            m_pFrameWork = new CFramework();
                            m_pFrameWork->Run( m_hHwnd );
                    }

            protected:
                    HWND m_hHwnd;
                    CFramework* m_pFrameWork;
            };
    }

 

C# 프로젝트 생성

C#의 Windows 응용프로그램 프로젝트를 생성해준다.

폼 디자이너에서 적당히 폼을 만들어주고 PictureBox 컨트롤을 배치해준다. 이 컨트롤에 실제 화면이 그려지게 된다.

그 다음 솔루션 탐색기에서 참조 추가를 이용해 위에 작성한 프로젝트의 DLL ( 미리 빌드 해놓자 )을 찾아서 추가해준다.

 

ref.jpg

 

ref2.jpg 

 

DLL이 성공적으로 추가 되면, 랩핑 클래스를 사용할수 있게 된다.

랩핑 클래스에서 선언한 네임 스페이스를 선언한 후 랩핑 클래스 객체를 생성하자.

그 다음 Create 함수에 PictureBox 핸들을 인자로 넘겨주면, Native C++쪽의 CFramework에서 이 핸들을 쓸수 있게된다.

정상적으로 작업이 수행되면, Native C++쪽에서 만들어지는 화면이 C#의 PitureBox에  그려지게 된다

 

  1. using CWrapper;
  2. public partial class Mainform : Form
    {
            private CFrameworkWrapper m_Frameowrk;

            public Mainform()
            {
                    InitializeComponent();
            }

            public void InitializeFramework()
            {
                    m_Frameowrk = new CFrameworkWrapper(); 
                    m_Frameowrk.Create(pictureBox1.Handle);
            }
    }

 출처 : http://tatis3.springnote.com/pages/4160233

반응형
Posted by blueasa
, |
반응형

'Programming > Design Pattern' 카테고리의 다른 글

C# 디자인패턴  (0) 2010.12.15
Dependency를 관리하는 방법  (0) 2010.10.21
Design Pattern Examples in C#  (0) 2010.07.23
GoF의 디자인패턴  (0) 2010.07.23
FSM - 유한 상태 기계 (Finite State Machine)  (0) 2010.07.09
Posted by blueasa
, |

개요

Win32 API를 불러올 때, 함수의 명칭, 인자, 리턴 값을 가지고 불러오게 되어 있다. 하지만, C#에서 타입들이 모두 객체(Object)의 형식이며, 일반적인 C 의 데이터 형과 상이한 모양을 가진다. 이러한 문제들을 해결할 수 있는 것이 PInvoke 기능이다.

 

PInvoke( Platform Invocation Service)는 관리화 코드에서 비관리화 코드를 호출할 방법을 제공한다. 일반적인 용도는 Win32 API의 호출을 위해 사용한다.

 

namespace PinvokeExample

{

using System;

 

             using System.Runtime.InteropServices; // 반드시 입력해야 한다.

 

             public class Win32

             {

                           [DllImport(“user32.dll”)]

                           public static extern int FindWindow(string a, string b);

                          

             }

}

 

위 예제는 FindWindow라는 user32.dll C함수를 사용하는 모습을 보여주고 있다. 실제 FindWindow의 선언은 다음과 같다.

 

             HWND FindWindow(LPCSTR swClassName, LPCSTR swTitle);

 

HWND는 윈도우 핸들을 표현하는 32비트 정수 이므로, int형으로 치환되고 LPCSTR 형은 NULL로 끝나는 문자열을 표현한다. 이때 PInvoke string을 자동으로 LPCSTR로 치환해 주는 역할을 하게 된다.

이 문서에서는 이처럼 Win32 API 함수의 여러 유형들을 어떻게 C#에서 사용 할 것인지에 대하여 알아보자.

 

WIN32 데이터형의 치환

Win32 API에서 일반적으로 사용하고 있는 데이터형은 모두 C#의 데이터 형으로 치환될 수 있다.

 

Win32 API TYPE

C#

BOOL, BOOLEAN

bool

BYTE

byte

CALLBACK

delegate

COLORREF

int

DWORD

int

DWORD_PTR

long

DWORD32

uint

DWORD64

ulong

FLOAT

float

HACCEL

int

HANDLE

int

HBITMAP

int

HBRUSH

int

HCONV

int

(모든 HANDLE 타입) Hxxxx

int

LPARAM

long

LPCSTR

[in] string [out] StringBuilder

LPBOOL

ref bool

이외 LP*

ref 형식

UINT

uint

Uxxxx

unsigned 타입들..

WORD

Short

WPARAM

Uint

 

 

Structure 의 전달

예를 들어 POINT 형의 경우,

typedef struct t_Point {

             int x;

             int y;

} POINT;

 

이것은 기본적으로 다음과 같이 선언될 수 있다.

[순차적]

[StructLayout(LayoutKind.Sequential)]
public struct Point {
      public int x;
      public int y;
}

 

[명시적]

[StructLayout(LayoutKind.Explicit)]
public struct Point {
      [FieldOffset(0)] public int x;
      [FieldOffset(4)] public int y;
}

 

일차적으로 할당되는 메모리 레이아웃이 동일하다면, C#에서 바로 받아 들이 수 있다.

 

// BOOL SetWindowPos(POINT pos); 이런 함수가 있다고 가정하면… ^^

 

[DllImport (“user32.dll”)]

public static extern bool SetWindowPos(Point pos);

 

사용할 함수 이름 바꾸기

여기서 함수의 이름을 바꿔서 사용하고 싶다면 다음과 같이 변경하면 된다.

 

// BOOL SetWindowPos(POINT pos);

 

[DllImport (“user32.dll”, EntryPoint = “SetWindowPos”)]

public static extern bool ShowAt(Point pos);

레퍼런스형 전달하기

 

LPPOINT형은 POINT의 포인터 형이므로 ref Point와 같이 사용 할 수 있다. 실제 사용하는 형식은 다음과 같다.

C 언어의 포인터의 경우 레퍼런스로 사용하려고 하면, ref 키워드를 사용하는 방법이 있다.

// BOOL SetWindowPos(HWND hWnd, LPRECT lpRect);

[DllImport(“user32.dll”)]

public static extern bool SetWindowPos(int hWnd, ref Rect lpRect);

 

Out형 함수 인자 사용하기

MSDN 같은 곳에서 함수의 선언을 살펴보면 다음과 같은 형식의 함수를 볼 수 있을 것이다. 이러한 형식은 레퍼런스 형으로 결과를 함수의 인자에 보내겠다는 말이다. 이러한 형식은 Win32 API에서 많이 쓰이고 있고, 포인터를 사용하므로, 많은 주의를 기울여야 한다.

 

BOOL GetWindowRect(
  HWND hWnd,      // handle to window
  LPRECT lpRect   // window coordinates
);

Parameters

hWnd

[in] Handle to the window.

lpRect

[out] Pointer to a RECT structure that receives the screen coordinates of the upper-left and lower-right corners of the window.

 

여기서 LPRECT는 앞 절에서 설명한 Structure의 전달을 참고하여 치환 될 수 있다.

여기서 lpRect RECT의 포인터이며, GetWindowRect 함수 내에서 이 포인터에 직접 값을 쓰게 되어 있다. 즉 이 포인터는 값을 기록하기 위한 인자이지, 값을 전달하기 위한 인자는 아닌 것이다. 이것은 또 다른 C# 레퍼런스 연산자인 out 키워드를 사용하여 쉽게 해결 할 수 있다.

public static extern bool GetwindowRect(int hWnd, out Rect lpRect);

 

실제 사용하는 모습은 다음과 같다.

public static extern bool GetWindowRect(int hWnd, out Rect lpRect);

public static void UseFunction() {

        Rect _rect; // 값을 대입하지 않아도 된다.

        Win32.GetWindowRect(hwnd, out _rect);

}

 

참고로 ref 키워드는 입력과 출력 둘 다 사용 할 수 있다. 그러나 ref를 사용하는 변수가 값이 설정되어 있다는 가정을 하고 있으므로, 이전에 반드시 어떠한 값을 입력해야 한다.

실제 사용 예는 다음과 같다.

public static extern bool GetWindowRect(int hWnd, ref Rect lpRect);

public static void UseFunction() {

        Rect _rect = new Rect(); // 꼭 값을 대입해야 한다.

       

        _rect.top = 20; _rect.left = 30;

        _rect.bottom = 50; _rect.right = 60;

 

        Win32.GetWindowRect(hwnd, ref _rect);

}

 

여기서 잠깐

대중없이 Rect라는 구조체가 나오는데 이는 API에서 RECT형을 C#으로 바꾸어 사용하는 structure이다. 앞의 예제들은 다음과 같은 선언을 하였다고 가정한다.

[StructLayout(LayoutKind.Explicit)]
public struct Point {
      [FieldOffset(0)] public int top;
[FieldOffset(4)] public int left;
[FieldOffset(8)] public int bottom;
[FieldOffset(12)] public int right;

}

 

 

CALLBACK 함수의 선언

C 언어에서 콜백 함수는 함수 포인터로 존재하게 된다. 이것은 함수 인스턴스의 포인터로, 함수 자체를 전달하게 되는 방식이다. 대표적으로 사용되는 부분은 EnumWindows 함수이다.

// BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARMAM IParam)

이 함수는 현재 열려 있는 모든 윈도우 핸들을 열거하기 위한 함수로 실제 처리하는 부분은 함수 포인터, 즉 콜백함수인 lpEnumFunc에서 처리하게 되어 있다. WNDENUMPROC 타입의 선언은 다음과 같다.

// typedef BOOL (CALLBACK* WNDENUMPROC)(HWND, LPARAM);

public delegate bool Callback(int hWnd, long lParam);

이러한 콜백 함수 역할을 하는 C#의 프리미티브는 delegate이다. CALLBACK delegate로 지환된다.

 

결과적으로 다음과 같이 사용하게 된다.

namespace ada.appshare

{

             public delegate bool Callback(int hwnd, int lParam);

            

             internal class Win32

             {

               

                           internal static extern int EnumWindows(CallBack x, int y);

                           [DllImport("user32.dll")]

 

                public static bool EnumWindowsCallback(int hWnd, int lParam)
                {

                        System.Console.WriteLine(“” + hWnd);

                        return true;

                }

                

             }

 

        public static void Main(String []args)

        {

                Win32.Callback call
= new Win32.Callback(Win32.EnumWindowsCallback);

                Win32.EnumWindows(call, 0);

        }

}

반응형
Posted by blueasa
, |

윈도우에 열려있는 창을 제어하기 위한 핸들값을 가져오는 API 함수
창의 클래스명이나 캡션명은 Spy++ 로 알 수 있다.
※주의사항
함수명의 대소문자가 틀리면 안된다.
FindWindowEx() 함수를 FindWindowEX() 로 했더니 에러 발생.

[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
-> 창의 클래스명이나 창 캡션명으로 최상위 핸들값을 가져옴.
예)
int i = FindWindow(null, "Windows Messenger");  // 창의 캡션명으로 찾기
int j = FindWindow("MSBLClass", null);  // 창의 클래스명으로 찾기

[DllImport("user32.dll")]
public static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
-> 인자값으로 받은 핸들의 자식 핸들을 가져옴. lpsz1 은 클래스명, lpsz2 는 캡션명.
예)
int hw2 = FindWindowEx(hw1, 0, "PluginHostClass", null);  // PluginHostClass 의 핸들값 가져옴.
int hw3 = FindWindowEx(hw2, 0, "MSBLGeneric", null);  // MSBLGeneric 클래스의 핸들값.
int hw4 = FindWindowEx(hw3, 0, MSBLGeneric", "Task List");  // MSBLGeneric 클래스이며 Task List 캡션명의 핸들값. 
반응형
Posted by blueasa
, |

인용 : http://redreans.tistory.com/17
첫번째 방법

1. 부모창에서 자식창을 선언.
private void button3_Click(object sender, EventArgs e)
{
     Form2 chfm = new Form2();
     chfm.ShowDialog(this);
}


2. 자식창에서 부모값으로 넘김

private void button1_Click(object sender, EventArgs e)
{
    ((Form1)(this.Owner)).temp = textBox1.Text;
}


두번째 방법.

1. 자식창에서 부모와 같은 클래스로 선언한다.

public Form2()
{
    InitializeComponent();
}
public Form1 fm;

2. 부모창에서 자식창을 선언할 때 자식클래스에 선언한 부모와 같은 클래스형에 참조시킨다.

private void button3_Click(object sender, EventArgs e)
{
    Form2 chfm = new Form2();
    chfm.fm = this;
    chfm.ShowDialog();
}

3. 자식창에서 다음과 같이 제어한다.

private void button1_Click(object sender, EventArgs e)
{
    fm.temp = textBox1.Text;
}


출처 : http://darak.wo.tc/xe/blog/154
반응형

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

C#에서 Win32 API 사용하기  (0) 2010.05.28
창 핸들값 구하는 API 함수  (0) 2010.05.28
C# Namespace 정리  (0) 2010.05.27
Windows Forms 컨트롤 사용 방법 시리즈 – Visual C#  (0) 2010.05.27
JIT  (0) 2010.05.26
Posted by blueasa
, |

C# Namespace 정리

Programming/C# / 2010. 5. 27. 21:48

Mcrosoft.CSharp : C#을 사용한 컴파일과 코드 생성 제공
Mcrosoft.JSharp : JSharp.NET 을 사용한 컴파일과 코드 생성 제공
Mcrosoft.VisualBasic : VisualBasic.NET 을 사용한 컴파일과 코드 생성 제공
Mcrosoft.Win32 : 윈도우 레지스트리 참조와 윈도우 시스템 이벤트 제공
System : 일반적으로 사용되는 값 타입과 레퍼런스 데이타 타입, 이벤트와 이벤트 핸들러, 인터페이스 , 속성, 예외 등을 포함하며, 가장 중요한 네임스페이스이다.
System.Collections : 리스트와 큐 배열, 해쉬 테이블, 사전 등과 같은 컬렉션 타입 제공
System.ComponentModel : 컴포넌트의 런타임과 디자인 타임 때 사용 제공
System.Configuration : .NET 프레임 워크 설정 세팅을 위해 참조 제공
System.Data : ADO.NET 타입 제공
System.Data.SqlClient : Sql Server.NET 데이터 타입 제공
System.Data.SqlTypes : 윈시SQL서버 데이터 타입 제공
System.Diagnostics : 디버깅과 트래킹을 위한 애플리케이션, 윈도우의 이벤트 로그 클래스제공
System.DirectoryService : LDAP이나 NDS와 같은 서비스 제공자를 사용하여 동적 디렉토리 참조 제공
System.Drawing : 윈도우 GDI+  그래픽 타입 제공
System.Globalization : 언어 수용과 관련되 타입, 스티링 정렬 순서, 나라/지역, 달력,날짜, 통화와 같은 숫자 형태 제공
System.IO : 스트림과 파일에 읽고 씀
System.Messaging : 메시지가 큐에 넣어 보내고 받고 관리하는 기능(MSMQ) 제공
System.Net : DNS와 HTTP같은 간단한 네트위크 프로토콜 API제공
System.Net.Sockets : TCP/UDp 소켓 API제공
System.Reflection : 적재된 타입과 멤버 참조 제공
System.Reflection.Emit : 메타데이터/IL 생성과 PE파일 생성 제공
System.Resources 애플리케이션 리소스위 생성과 관리 제공
System.Runtime.InteropService : COM 객체와 원시 API 참조 제공
System.Runtime.Remoting : 분산 객체의 생성과 설정 제공
System.Runtime.Remoting.Channels : 원격 채널관리와 채널 싱크(sink) 제공
System.Runtime.Remoting.Channels.Http : HTTP(SOAP) 채널 관리 제공
System.Runtime.Remoting.Channels.Tcp : TCP(이진) 채널 관리 제공
System.Runtime.Remoting.Lifetime : 원격 객체의 생명주기 관리 제공
System.Security : CLR 보안 시스템 하의 참조 제공
System.Security.Permissions : 정책에 기반한 오퍼레이션과 리소스 참조 제한 제공
System.Security.Policy : CLR 보안 정책 시스템에 적용될 규칙이 정의된 코드 그룹, 멤버쉽 상태 , 증거 제공
System.Security.Principal : 규칙 기반의 보안이 사용된 주요 클래스, 인터페이스, 열거형 제공
System.ServiceProcess : 윈도우 서비스 설치와 실행 제공
System.Text : ASCII, 유니코드, UTF-7, UTF-8 과 같은 텍스트 인코딩과 전환 제공
System.Text.RegularExpression : 이미 만들어져 있는 정규 표현식 엔진 참조 제공
System.Threading : 멀티 쓰레드 프로그래밍을 위한 클래스와 인터페이스 제공
System.Timers : 특정한 시간 간격으로 이벤트를 발생시키는 타이머 컴포넌트 제공
System.Web : HttpApplication, HttpRequest. HttpResponse 와 같은 ASP.NET 클래스에서 사용하는 기능을 포함한 브라우저/ 서버간의 통신 제공
System.Web.Configuration : ASP.NET설정 클래스와 열거형 제공
System.Web.Services : 웹 서비스 제작과 사용 제공
System.Web.Services.Description : WSDL을 사용한 웹 서비스 제공
System.Web.Services.Discovery : DISCO를 통한 웹 서비스 제공
System.Web.SessionState : ASP.NET세션 상태 참조 제공
System.Web.UI : ASP.NET 웹 페이지와 컨트롤 생성
System.Web.UI.Design : 웹 폼을 제공하기 위한 디자인 제공
System.Web.UI.Design.WebControls : 웹 컨트롤을 제공하기 위한 다지인 제공
System.Web.UI.HtmlControls : HTML 서버 컨트롤 생성 제공
System.Web.UI.WebControls : Web 서버 컨트롤 생성 제공
System.Windows.Forms : 윈도우 폼 기반의 사용자 인터페이스와 컨트롤 생성 제공
System.Windows.Forms.Design : 윈도우 품을 위한 디자인 제공
System.Xml : 표준 XML제공
System.Xml.Schema : 표준 XML스키마 제공
System.Xml.Serialization : XML문서 또는 스트림 객체의 직렬화 제공
System.Xml.XPath : XPath 파서와 평가 엔진 제공
System.Xml.Xsl : XSL전환 제공


출처 : http://amps.tistory.com/80

반응형
Posted by blueasa
, |

OutAttribute 클래스
데이터가 피호출자로부터 호출자로 마샬링 됨을 나타냅니다.
네임스페이스:  System.Runtime.InteropServices

 

 

마샬링(Marshaling)
1. 떨어져 있는 원격 객체를 호출하기 위해서는 원격 객체를 호출하는데 필요한 정보들을 묶는 작업이 필요한데 이러한 정보를 묶는 작업을 마샬링이라고 한다.

2. 근본적인 마샬링의 의미는 이기종간의 통신을 위해서 서로간에 형식을 맞추는 것을 말한다.

[출처] 마샬링|작성자 맹쥬

반응형
Posted by blueasa
, |