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

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-29 07:22

기본적으로 C#에서는 C++의 디폴트 매개변수 방법을 지원하지 않는 것 같다.

 

void func(int a, int b=1 ){ ... }

 

이런 함수가 있을 떄 디폴트 매개변수를 지원 안하면 같은 소스더라도 2배가 되기 때문에

 

디폴트 매개변수를 지정하는 것이 편할 때가 많았다.

 

하지만  C#에서는 지원을 따로 안하기 때문에 새로운 방법을 써야 한다.

 

public void func(int a){ func(a, 1); }

public void func(int a, int b){ ... }

 

이렇게 디폴트 파라미터가 필요없는 부분의 오버로딩시켜서 새로 호출 시키는 방법을 사용한다.

 

함수에 리턴값이 있을 경우는...

 

public int func(int a){ return func(a, 1); }

public int func(int a, int b){ ... }

반응형
Posted by blueasa
, |
프로세스와 스레드에 대한 개념은 어떤 프로그래밍 언어라 하더라두 공통으로 적용이 되는 부분입니다. C#에서 스레드를 사용하는 방식은 파라미터(Parameter)가 있냐 없냐에 따라서 달라집니다. 

파라미터(Parameter)가 없는 경우 
파라미터가 없는 경우에는 간단합니다. Thread 객체를 선언해 주고, 정의하는 과정에서 ThreadStart 를 만들어주면서 스레드가 동작시킬 함수명을 적어주면 됩니다. 

자 한번 볼까요?

Thread th = new Thread(new ThreadStart(test));
th.Start();

test 함수의 경우 void test() 가 생성되어 있어야 합니다. 위와 같이 적으면 스레드 객체를 생성하고 동작시킬 함수를 연결하고 바로 시작(Start()) 됩니다. 물론, 선언 따로, 정의 따로 시작따로 할수도 있겠죠. 



파라미터(Parameter)가 있는 경우 
파라미터가 있는 경우도 크게 어렵지는 않습니다만 Thread 객체를 정의할때, 조금 달라집니다. ThreadStart 대신에 ParameterizedThreadStart를 사용해서 Thread 객체와 동작시킬 파라미터가 있는 함수를 연결시킵니다. 

Thread th = new Thread(new ParameterizedThreadStart(test));
th.Start("Hello World");

public void test(string s)
{
...
}

위의 소스코드에서 보는것 처럼, 자신이 전달 하려는 파라미터 값에 대해서는 Start() 함수를 통해서 전달할 수가 있습니다. Start() 함수는 Overload되어있기 때문에 파라미터가 없이 Start()를 할수도 있지만, object 으로 파라미터를 전달해 주기도 합니다. 

참고로 .NET 1.1 Version 에서는 파라미터가 있는 경우에 대해서는 스레드의 지원이 안되었다고 합니다. 참고하세요^^ 

반응형
Posted by blueasa
, |

※ C#에서 호출시 C++/CLI 에서 리턴값, 파라미터값은 다음과 같이 처리합니다.

 

 [ String - BSTR (LPCTSTR) ]

// ex: Set

bool SetTestString(String^ strTestString)
{
   axTestCtrl1->TestString= strTestString;
   return true;

}

// ex: Get
String^ GetTestString()
{
   return axTestCtrl1->TestString;
}

short, int, long ]

 

: short, int, long 형은 그냥 주고 받으면 됩니다.

// ex: Set

bool SetShortVal(short nShortVal)
{
   axTestCtrl1->ShortVar = nShortVal;
   return true;
}

// ex: Get
short GetShortVal()
{
   return axTestCtrl1->ShortVal;
}

struct ]

// ex: 참조 가능한 구조체 선언

ref struct EocsTestStruct
{
   String^ eocsstrVal;
   short eocsnVal;
   long eocslnVal;
}

 

// ex: 구조체를 파라미터로 받아서 Set

bool SetEocsTestStruct(EocsTestStruct^% EocsTest)

{

   try

  {
      axTestCtrl1->ShortVar = nShortVal;

      axTestCtrl1->eocsstrVal= EocsTest->eocsstrVal;

      axTestCtrl1->eocsnVal= EocsTest->eocsnVal;
      axTestCtrl1->eocslnVal= EocsTest->eocslnVal;
      return true;

   }

   catch (Exception^ e) 
   {
       MessageBox::Show(e->Message);
       return false;
   }
}

...

... ING ... : 다른 케이스도 작업하다가 정리할 예정입니다.

...

반응형
Posted by blueasa
, |