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

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
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

웹에 가끔 질문을 올리시는 분들이 계셔서 모르시는 분들에게 도움이 될까 해서 올립니다. 아시다 시피 .NET은 COM 도 지원하지만 그냥 DLL을 직접 콜 하는 방식도 지원합니다. 이걸 PInvoke라고 하지요. 근데 이 PInvoke 이 사용하기가 조금 까다롭습니다. COM처럼 TLB가 있어서 상호간의 마샬이나 콜 방법을 도와 주는것이 있는것도 아니고, 따라서 자동으로 .NET wrapper을 만들어 주는 툴이 있는것도 아니고, 사용하는 사람이 직접 맞는 맵핑을 찾아야 하죠. 완전 시간 허비하며 이리저리 맞을때 까지 해봐야 하는게 일반적 입니다. 물론 spec을 보면 장황한 설명이 있습니다. win32의 경우는 특히 natvie 무슨 타입 형식이 .NET의 무슨 타입과 1:1 대응이 되며, 메모리 structure는 어찌 지정해야 되고 어쩌고 저쩌고. 그걸 다 외우면 기계적으로 맵핑이 다 될꺼 같은데... 아닙니다 . ㅡ.ㅡ.

 

하여간 그래서, 사람들이 모여서 그 정보를 모아 놓는 곳이 있습니다.

http://www.pinvoke.net 입니다.

 

여기 가셔서 찾으시는 win32 함수 이름을 맨위 search 박스에 넣고 찾으시면 거의 90% 찾으실수 있을 껍니다. 그 함수를 dllimport 하는 방법 부터, memory structure는 어떻게 해 줘야 하고 marshal 은 어떤 형식으로 해줘야 하는지 또 parameter로 사용되는 타입은 어떻게 지정해야 하는지 등등...

 

도움이 되셨으면 좋겠습니다.

출처 : http://blogs.msdn.com/b/heejaechang/archive/2008/09/22/c-windows-api.aspx

반응형

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

JIT  (0) 2010.05.26
C# 기초 - .NET 깊이 보기 : Intermediate Language(IL)  (1) 2010.05.26
[펌] String Formatting in C#  (0) 2010.05.25
C# 관련 사이트  (0) 2010.05.20
C# 강좌 사이트  (0) 2010.05.14
Posted by blueasa
, |

출처 : http://leadersway.cafe24.com/blog/entry/텍스트박스에-한글만-영어만-숫자만-입력하기?category=3

텍스트박스에 한글만 입력하기

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if((Char.IsPunctuation(e.KeyChar) || Char.IsDigit(e.KeyChar) || Char.IsLetter(e.KeyChar) || Char.IsSymbol(e.KeyChar)) && e.KeyChar != 8)
    {
        e.Handled = true;
    }
}

 

텍스트박스에 영어만 입력하기

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if(!(Char.IsLetter(e.KeyChar)) && e.KeyChar != 8)
    {
        e.Handled = true;
    }
}

 

private void textBox1_Leave(object sender, System.EventArgs e)
{
    Regex emailregex = new Regex(@"[a-zA-Z]");
    Boolean ismatch = emailregex.IsMatch(textBox1.Text);
    if (!ismatch)
    {
        MessageBox.Show("영문자만 입력해 주세요.");
    }
}

 

텍스트박스에 숫자만 입력하기

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if(!(Char.IsDigit(e.KeyChar)) && e.KeyChar != 8)
    {
        e.Handled = true;
    }
}
private void textBox1_Leave(object sender, System.EventArgs e)
{
    Regex emailregex = new Regex(@"[0-9]");
    Boolean ismatch = emailregex.IsMatch(textBox1.Text);
    if (!ismatch)
    {
        MessageBox.Show("숫자만 입력해 주세요.");
    }
}

 

음.. 이렇게 두번에 걸쳐 체크한 이유는 한글은 ProcessKey이기 때문에 KeyPress 이벤트가 일어나지 않기 때문입니다. 그렇기 때문에 텍스트박스에서 포커스가 벗어날때 정규식을 이용해 한번더 체크해줘야 합니다. 키값 8번은 백스페이스 값입니다.

 

자료출처 : C#개발자싸이트

http://www.sky.ph/

반응형
Posted by blueasa
, |

* 오래된 문서이기는 하나, 잘 정리되어 있기 때문에 번역한번 해보았습니다.
 더 추가된 포맷팅에 대해서는 MSDN을 참조하세요!

원문 : http://blog.stevex.net/string-formatting-in-csharp/

String.Format()함수를 사용하는 .NET 문자열 포맷팅에 관한 빠른 참조(quick reference)를 찾을 수 없어서, 이 문서를 만들었습니다.(이 것 때문에 문자열 포맷팅 FAQ와 이상한 이런 만화까지 만들어졌습니다.)

.NET Framework을 가지고 처음 작업했을때, 한 가지가 저를 당황케 했습니다. sprintf()가 없다는 점입니다. sprintf()는출력버퍼, 포맷팅 문자열과 몇개 인자를 받아서 원하는 형식의 문자열로 만들어 주는 C 함수입니다. 예를 들어

char szError[256];
sprintf(szError, "Error %d occurred. \n", nError);

nError가 12라고 가정한다면, 위 코드는 szError  버퍼에  "Error 12 occurred." 문자열을 쓸것입니다. 이것은 C 프로그래밍의 기본이며 명확하고 사용하기 간단하기 때문에, STL에서 더 좋은 기능을 제공하고 있지만, 대부분의 C++ 프로그래머들이 아직도 이것을 사용하고 있습니다. STL에서 위와 같은 코드는

str << "Error " << nError << " occurred." << endl;

거나, 이와 비슷할 것입니다. 이것은 type-safe이고 sprintf보다 더 객체지향적 이나, 로컬라이즈하거나 코드를 읽기가 쉽지는 않습니다.

.NET Framework은  문자열을 아주 휼륭하게 처리하나, 익숙해지는데 시간이 걸립니다. .NET에서 sprintf와 거의 동등한 기능을 가진 것은 포맷 문자열과 인자를 받아 출력 문자열을 생성하는, 정적 String.Format 함수 입니다. (이것은 출력버퍼에 오버플로우를 발생시키지 않는 다는 점에서 sprintf보다 훨씬 개선된 것입니다.) 예를 들면 위와 비슷한 코드는

string errorString = String.Format("Error {0} occurred.", nError);

입니다. 메타데이터의 능력때문에 .NET 환경에서는 포맷팅할때 데이터타입이 무엇인지 알려주는 문자열을 필요로 하지 않고, 사용하기 원하는 곳에 위치만 시키면 됩니다. (일반적인 sprintf 버그는 잘못된 데이터 타입을 제공하는 것으로, %d대신에 %s를 사용하는것을 막을 수 없으며, 이것은 sprintf가 호출될때 프로그램을 멈추게 할 것이다.)

위 문자열안의 {0}은 nError의 값으로 대체되지만, 이진수로 지정해서 지정해서 사용하려 한다면? 또는 16진수와 같은 것을 사용하려 한다면? Framework은 이러한 모든것들을 지원하지만, 문자 포맷팅을 사용하는 String.Format 함수를 사용하지 않고, 지정된 타입을 사용한다는 것이 혼란스러워 보일 수 도 있습니다.

모든 객체가 문자열을 반활할때 ToString 메소드가 호출됩다. ToString 메소드는 문자열 인자들을 받을 수 있고 - String.Fromat을 호출한 후, "{0:##}"가 같은 포맷팅 문자열들이 위치에 전달된 후 어떻게 포맷팅 될지 알려줍니다.

중괄호 안의 텍스트는 {Index[, alignment][:formatString]} 입니다. 만약 alignment가 양수이면, 텍스트는 오른쪽 정렬되며, 텍스트가 양수보다 작다면 공백이 추가됩니다. 만약 음수라면 왼쪽 정렬됩니다.

문자열

정렬을 제외하고는 문자열에 어떤 포맷팅도 적용되지 않습니다. 정렬의 모든 인자들은 String.Format이 호출될때, 사용되고 표시됩니다.

 예시 결과 
 String.Format("->{0,10}<-", "Hello");  ->   Hello<-
 String.Format("->{0,-10}<-", "Hello");  ->Hello    <-

숫자

기본적인 숫자 포맷팅 지정자입니다.

지정자  타입  형식  결과(1.42일 경우)  결과(-12400일 경우) 
 c  통화  {0:c}  $1.42  -\12,400
 d  10진수  {0:d} System.FormatException  -12400
 e  지수  {0:e}  1.420000e+000  -1.240000e+004
 f  고정소수점  {0:f}  1.42  -12400.00
 g  일반  {0:g}  1.42  -12400
 n  천단위로 ","로 구분
 되는 숫자
 {0:n}  1.42  -12,400
 r  라운드트립  {0:r}  1.42  System.FormatException
 x  16진수  {0:x4}  System.FormatException  cf90

* 라운드트립 :
이 형식은 SingleDouble 형식에만 사용할 수 있습니다. 라운드트립 지정자는 문자열로 변환된 숫자 값이 같은 숫자 값으로 다시 구문 분석될 수 있도록 보장해 줍니다. 이 지정자를 사용하여 숫자 값 형식을 지정하면 Double에는15자리의 전체 자릿수를, Single에는 7자리의 전체 자릿수를 가진 일반 형식을 사용하여 숫자 값을 먼저 테스트합니다. 이 값이 같은 숫자 값으로 다시 구문 분석되면 일반 형식 지정자를 통해 형식이 지정됩니다. 그러나 이 값이 같은 숫자 값으로 다시 구문 분석되지 못하면, Double에는 17자리 전체 자릿수를, Single에는 9자리 전체 자릿수를 사용하여 이 값의 형식이 지정됩니다.전체 자릿수 지정자가 있더라도 무시됩니다. 이 지정자를 사용할 때는 라운드트립이 전체 자릿수보다 우선합니다. - MSDN

사용자정의 포맷팅 입니다.

 지정자 타입   예시  결과(1500.42일 경우) 설명 
 0  0 자리 표시자  {0:00.0000}  1500.4200  지정된 자릿수만큼 0을
 추가한다.
 #  10진수 자리 표시자  {0:(#).##}  (1500).42  
 .  소숫점  {0:0.0}  1500.4  
 '  천자리 구분 기호  {0:0,0}  1,500  반드시 두 0사이에 있
 어야 한다.
 '.  숫자 스케일링  {0:0,.}  2  1000을 기준으로, 해당
 숫자의 스케일을 알려
 준다. 예를 들면 1499
 는 1이고, 1500은 2이
 다.
 %  비율  {0:0%}  150042%  100을 곱하고 %기호를
 붙인다.
 e  지수 자리 표시자  {0:00e+0}  15e+2  많은 지수표현이 가능
 합니다.
 ;  그룹 구분자  하단 참조    

그룹구분자는 음수값을 괄호로 묶는것이 필요로 하는 통화 값 형식에 유용합니다. 이 통화 형식 예제는 문서의 하단에 있습니다.

날짜

날짜 포맷팅은 시스템의 국가별 설정에 따라 다릅니다. 아래 예는 저의 로컬 로케일 설정에 의한 것입니다.

 지정자 타입  예(System.DateTime.Now일 경우) 
 d  짧은 날짜  2009-11-02
 D  긴 날짜  2009년 11월 2일 월요일
 t  짧은 시간  오후 4:30
 T  긴 시간 오후 4:30:06
 f  전체 날짜 시간  2009년 11월 2일 월요일 오후 4:30
 F  긴 전체 날짜 시간  2009년 11월 2일 월요일 오후 4:30:06
 g  기본 날짜 시간  2009-11-02 오후 4:30
 G  긴 기본 날짜 시간  2009-11-02 오후 4:30:06
 M  월 날짜 패턴  11월 2일
 r  RFC1123 날짜 문자열  Mon, 02 Nov 2009 16:30:06 GMT
 s  정렬가능한 날짜 문자열  2009-11-02T16:30:06
 u  정렬가능한 유니버셜 날짜 시간 패턴,
 로컬타임
 2009-11-02 16:30:06Z
 U  정렬가능한 유니버셜 날짜 시간 패턴,
 GMT
 2009년 11월 2일 월요일 오전 7:30:06
 Y  년 월 패턴  2009년 11월

사용자 지정 날짜 포맷팅

 지정자 타입   예시 결과 
 dd  일  {0:dd}  02
 ddd  요일  {0:ddd}  월
 dddd  전체 요일  {0:dddd}  월요일
 f, ff, ...  초 유효자릿수  {0:fff}  366
 gg, ...  시대  {0:gg}  서기
 hh  2자리 시간  {0:hh}  04
 HH  2자리 시간, 24시간 형식  {0:HH}  16
 mm  00-59 분  {0:mm}  43
 MM  01-12 월  {0:MM}  11
 MMM  월 약어  {0:MMM}  11
 MMMM  월 이름  {0:MMMM}  11월
 ss  00-59 초  {0:ss}  47
 tt  AM, PM  {0:tt}  오후
 yy  2자리 년  {0:yy}  09
 yyyy  년  {0:yyyy}  2009
 zz 2자리  타임존 옵셋  {0:zz}  +09
 zzz  타임존 옵셋  {0:zzz}  +09:00
 :  구분자  {0:hh:mm:ss}  04:43:47
 /  구분자  {0:dd/MM/yyyy}  02-11-2009

열거형

 지정자  타입
 g  열거자 이름을 문자열로 가져올 수 있으면, 문자열로 그렇지
 않으면 정수로 보여줍니다.
 f  열거자 이름을 문자열로 보여줍니다.
 d  열거자 이름을 정수로 보여줍니다.
 x  열거자 이름을 8자리의 16진수로 보여줍니다.

유용한 예제들

String.Format("{0:$#,##0.00; ($#,##0.00); Zero}", value);

이것은 만약 1243.50을 전달하면, "$1,240.00"을 반환할 것입니다. 만약 -값이 전달된다면, 괄호안에 같은 형태의 결과값이 반활될 것입니다.("($1,240.00)") 만약 0이 전달된다면 "Zero"가 반환될 것입니다.

String.Format({0:(###) ###-####}", 8005551212);

이것은 "(800) 555-1212"를 반환할 것입니다.


반응형
Posted by blueasa
, |

참고 사이트

Programming/C++/CLI / 2010. 5. 25. 17:33
반응형

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

Managed 문자열 -> Unmanaged 문자열 변환  (0) 2010.05.26
C++/CLI 예제  (0) 2010.05.25
CLI의 기본 타입  (0) 2010.05.25
C++/CLI 관련 용어 정리  (0) 2010.05.25
C++/CLI 강좌: C++/CLI와 C#  (0) 2010.05.25
Posted by blueasa
, |

C++/CLI 역시 CLI의 한 구현물이다 보니 CTS에서 말하는 기본 타입을 모두 지원한다.
다음 표에 13개의 기본 타입을 요약해놨는데,
다행히 이런 기본 타입은 네이티브 쪽이나 관리되는 코드 쪽이나 같은 키워드를 사용하므로 금방 익숙해진다.


CLI 타입

C++/CLI 키워드

예제

설명

System::Boolean

bool

bool success = true;

true/false

System::Byte

unsinged char

unsigned char c = 'c';

부호 없는 8비트 정수

System::Char

wchar_t

wchar_t wc = L'w';

유니코드 문자

System::Double

double

double d = 1.1E-11;

8바이트짜리 배정밀도 부동 소수점

System::Int16

short

short s = 12;

16비트 정수

System::Int32

int, long

int i = 100;

32비트 정수

System::Int64

__int64, long long

__int64 i = 100;

64비트 정수

System::SByte

char

char c = 'T';

8비트 정수

System::Single

float

float i = 1.01f

4바이트짜리 단정밀도 부동 소수점

System::Uint16

unsigned short

unsigned short i = 100;

부호 없는 16비트 정수

System::UInt32

unsigned int, unsigned long

unsigned int i = 100;

부호 없는 32비트 정수

System::UInt64

unsigned __int64, unsigned long long

unsigned __int64 i = 100;

부호 없는 64비트 정수

Void

void

 

타입 없는 데이터나 데이터 없음

반응형

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

C++/CLI 예제  (0) 2010.05.25
참고 사이트  (0) 2010.05.25
C++/CLI 관련 용어 정리  (0) 2010.05.25
C++/CLI 강좌: C++/CLI와 C#  (0) 2010.05.25
expert_cppcli_.net_for_visual_cpp_programmers.pdf  (0) 2010.05.24
Posted by blueasa
, |

1. CLI(Common Language Infrastructure) : 공통 언어 기반
- ECMA의 공인을 받은 공개된 명세.(구현이 아님)
- "공통 언어라 불리려면 이것 저것 등등을 구현해야 한다"고 적어놓은 문서.
- CLI는 표준 명세이고, 이에 맞춰 구현하는 일은 각 벤더나 오픈 소스 프로젝트의 몫
- CLI 명세에 따른 구현물 : .NET Framework, 모노, DotGNU

2. .NET Framework
- CLI 명세에 따라 MicroSoft사가 개발한 구현물.
- CLR(Common Language Runtime:공통 언어 런타임)과 BCL(Base Class Library)가 포함.

3. BCL(Base Class Library) : 기본 클래스 라이브러리
- MS 제공
- CLI에 명세로 기록된 기본 타입을 제외한 .NET Framework의 나머지는 BCL에 속함.
- 사실상 mscorlib만 CLI 명세에 따른 구현물일 뿐 나머지는 BCL에 속함.
- System.Web(웹 개발 관련 기능 제공)
- System.Data(네임스페이스/데이터베이스 관련 기능 제공)
- 그 외 : System / System.Xml / System.Drawing / System.Windows.Forms / Microsoft.VisualC
            / MicroSoft.Build.Utilities / Microsoft.Build.Framework

4. CTS(Common Type System) : 공용 형식 시스템
- 런타임에서 형식을 선언하고 사용 및 관리하는 방법을 정의
- 언어 간 통합에 대한 런타임 지원의 중요한 부분을 차지

5. CLS(Common Language Specification) : 공용 언어 사양
- 많은 응용 프로그램에 필요한 기본 언어 기능 집합.
- CTS의 하위 집합을 정의.
- 따라서 CTS에 적용되는 모든 규칙은 CLS에도 적용되며, 둘 중 CLS 규칙이 더 엄격함.
- "CLS-Compliant인 코드라면 C#, F#, IronPython 등 언어를 가리지 않고 잘 돌아간다"는 뜻이다.
- 언어 간 호환성을 위한 최소 조건


반응형

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

참고 사이트  (0) 2010.05.25
CLI의 기본 타입  (0) 2010.05.25
C++/CLI 강좌: C++/CLI와 C#  (0) 2010.05.25
expert_cppcli_.net_for_visual_cpp_programmers.pdf  (0) 2010.05.24
wrapping 자동화 관련..  (0) 2010.05.24
Posted by blueasa
, |
반응형

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

CLI의 기본 타입  (0) 2010.05.25
C++/CLI 관련 용어 정리  (0) 2010.05.25
expert_cppcli_.net_for_visual_cpp_programmers.pdf  (0) 2010.05.24
wrapping 자동화 관련..  (0) 2010.05.24
C++/CLI Quick Referrence  (0) 2010.05.24
Posted by blueasa
, |
반응형

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

C++/CLI 관련 용어 정리  (0) 2010.05.25
C++/CLI 강좌: C++/CLI와 C#  (0) 2010.05.25
wrapping 자동화 관련..  (0) 2010.05.24
C++/CLI Quick Referrence  (0) 2010.05.24
c++ lib 를 c# 에서 사용하기 (c++/cli)  (0) 2010.05.17
Posted by blueasa
, |
반응형
Posted by blueasa
, |
반응형
Posted by blueasa
, |