280 likes | 486 Views
. NET Framework with Visual C++. 오광섭 DaulSoft 개발2팀장 Microsoft Asia MVP. 순서. Visual C++ .NET 살펴보기 .NET Framework 이란 Managed C++ 프로그래밍 .NET Framework Class Library 기존 환경과의 통합 Q&A NOTE : Not so much about .NET Class Library. Visual C++ .NET 살펴보기. 특징
E N D
.NET Framework with Visual C++ 오광섭 DaulSoft 개발2팀장 Microsoft Asia MVP
순서 • Visual C++ .NET 살펴보기 • .NET Framework 이란 • Managed C++ 프로그래밍 • .NET Framework Class Library • 기존 환경과의 통합 • Q&A NOTE : Not so much about .NET Class Library
Visual C++ .NET 살펴보기 • 특징 • VS .NET에서 유일하게 Unmanaged Code를 생성 • 달라진 점 • 통합된 IDE • 사라진 클래스 위저드 • 솔루션 파일 • MFC, ATL 업그레이드 • 컴파일러의 성능/속도 향상, STL 지원 향상 • 디버깅 기능 향상 • 단점 • 여전히 비주얼한 화면구성은 불가능
demo Visual C++ .NET 달라진 IDE
.NET Framework 이란(1) • 새로운 플랫폼, .NET • 새로운 런타임 환경과 클래스 라이브러리 • MSIL (Microsoft Intermediate Language) • Assembly (.NET Binary) • IL과 Metadata 저장 (EXE / DLL 형태) • CLR (Common Language Runtime) 구성 • CTS (Common Type System) • CLS (Common Language Specification) • JIT (Just In Time) Compiler : Jitter
.NET Framework 이란(2) • CLR의 기능 • Cross language implementation • Versioning • Security • Garbage Collection • Runtime Service • Object Layout • … • .NET Framework Class Library • 객체지향형 공용 라이브러리 • …
.NET Framework 이란(3) Linker Source Code Compiler EXE / DLL (IL & Metadata) Meta Data Engine Managed Native Code JIT Compiler Class Loader .NET Framework Class Library Execution Security Checks CLR (Runtime Engine)
demo C#, C++, VB의 IL 코드 비교 (ILDasm.exe 사용)
Managed C++ 프로그래밍 (1) • 새로 등장하는 지시어들 • __gc, __value • __abstract, __sealed, __super • __interface • __int8, __int16, __int32, __int64 • __pin : MyClass __pin *pMyClass • __box (Boxing, Unboxing), dynamic_cast int iTemp = 12 ; Object* pObj = __box(iTemp) ; int iTemp2 = *dynamic_cast<__box int*>(iTemp) ;
Managed C++ 프로그래밍 (2) • Destructor는 사라졌다 • 컴파일러가 알아서 완결자로 대치함 • Finalizer (완결자) • 최상위 클래스인 Object의 Finalize() 함수를 오버라이드 할 수 있다 • 프로그래머가 그 호출시기를 결정할 수 없다. • 반드시 필요한 경우에만 구현하는 것이 좋다.
Managed C++ 프로그래밍 (3) • Dispose() 함수 • 비관리 리소스들을 관리하기 위해서 • IDisposable 인터페이스를 상속받아서 구현한다 • Finalize와 혼용하여 사용되는 것은 좋지않다 • 연산자 오버로딩 • CLS에 이미 정의되어 있다 • 예 : +는 op_Addtion 함수를 만들면 된다 • 동적 Array • Int32 ar[,] = new Int32[3,2] ; • __gc 배열은 포인터 연산을 할 수 없다 • __nogc 지시어 : Int32 arr __nogc[10] ;
Managed C++ 프로그래밍 (4) • 프로퍼티 • 가상 데이터멤버로 멤버함수와 자동으로 연결 • VB 같은 언어에서 만든 클래스를 C++에서 사용 • Delegate 형 • C++의 함수포인터 개념을 .NET 환경에 맞게 수용 • Event • 이벤트 정의, 핸들러 선언, 연결리스트에 추가 • VC++에서는 모든 이벤트 핸들러를 직접 만들어야
demo Hello World with Managed Extentions
.NET Framework Library(1) • .NET Namespace • #using <mscorlib.dll> • using namespace System ; • 문자열 클래스 • 문자열 조작을 위한 각종 method 제공 • 문자열이 한번 할당되면 변경되지 않는다. (StringBuilder 클래스) • 컬렉션 클래스 • ArrayList, Stack, Queue, StringCollection …
.NET Framework Library(2) • Windows::Form • .NET의 모든 GUI를 담당하는 클래스 모음 • System::Windows::Forms, Design으로 구성 • System::Drawing • GDI+ • Graphics 클래스 • 파일처리 • System::IO • Stream 클래스 • BinaryReader, BinaryWriter • TextReader, TextWriter
demo Windows::Forms
.NET Framework Library(3) • XML 다루기 • XML은 .NET의 핵심기술, 지원 클래스 제공 • System::Xml, System::Xml::Schema, Serialization, Xpath, Xsl • XmlTextReader, XmlTextWriter, XmlDocument, …. • ADO .NET을 사용한 DB Access • 연결형 : 데이터소스에 직접연결하여 데이터관리 • 비연결형 : DataSet을 사용, 캐쉬데이터 관리
demo ADO .NET
.NET Framework Library(4) • 웹서비스 • COM을 대신하여 분산 어플리케이션을 쉽게 제작하기 위해 등장한 개념 • SOAP (Simple Object Access Protocol) : XML과 HTTP를 사용한 원격호출 제공 • WSDL (Web Service Description Language) : 함수리스트, 파라미터 정보 COM의 타입라이브러리와 유사
demo .NET Web Service
.NET Framework Library(5) • ATL Server • 웹기반 프로그램과 웹서비스 제작 지원 • ATL Web Service는 .NET 어플리케이션이 아닌 Win32 환경의 클라이언트가 .NET 웹서비스를 사용할 수 있도록 하기 위해서 사용 • 예전의 ATL과 크게 달라진 점은 없다.
demo .NET ATL Server
기존 환경과의 통합 • Win32 DLL을 가져다 사용하는 방법 • P/Invoke (Platform Invoke)를 통해 Win32 DLL 함수 호출 • 구조체 사용하기 : StructLayoutAttribute, FieldOffsetAttribute 클래스 사용 • COM 컴포넌트 사용 • COM은 구시대 유물로 전락하는가 ? • RCW (Runtime Callable Wrapper)생성 • tlbimp.exe (Type Library Importer)를 사용 • Late Bind를 통해 실행시 바인딩이 가능하다 • COM에서 .NET 컴포넌트를 호출가능 (CCW – COM Callable Wrapper를 사용) • ActiveX 컨트롤 사용 • Aximp.exe를 사용하여 RCW 생성
demo Win32 DLLs in .NET with Visual C++
demo COM in .NET with Visual C++
demo ActiveX in .NET with Visual C++
참고문헌 • .NET Framework with Visual C++, Chris Lucas, TechEd 2002 • Microsoft Visual C++ .NET Step by Step, 서우석 역, 정보문화사 • C# and the .NET Platform, 원유태외 3명 역, 인포북 • MSDN, http://msdn.microsoft.com • The C++ Programming Language, Bjarne Stroustrup, Addison-Wesley • Return of the Rich Client, Jason Clark, MSDN Magazine June 2002 http://msdn.microsoft.com/msdnmag/issues/02/06/rich/rich.asp
Q&A • madchick@daulsoft.com • http://www.madchick.com