xPlatform의 Win32 API 영역 중에 Microsoft Visual C++ Runtime에 관한 정보 수집이 어느 정도 완료되었고 이것을 바탕으로 Phase #1을 이번달 말에 예정대로 런칭할 계획입니다. Visual C++ Runtime (msvcrt.dll)의 상당 수의 시그니처는 libc와 일치하는 것으로 보이며 이 중 몇 가지를 시험삼아 Linux 버전으로 옮겨서 작업 중입니다.

아래의 동영상은 Asianux 2.0 SP1 기반의 PC에서 Mono 1.2.5.1_3을 이용하여 xPlatform DLL을 이용한 간단한 파일 입/출력 서비스를 보여주고 있습니다. 점진적인 테스트를 거쳐 Linux에서도 표준 파일 입/출력 서비스 및 기본 C 런타임을 사용할 수 있도록 준비할 계획입니다.

Creative Commons License
Creative Commons License
남정현 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다

Premium Sponsor:

.NETers

제 3회 .NETers 학술제

  • 2007년 12월 6일 ~ 2007년 12월 7일
  • 오전 10시 ~ 오후 6시
  • 인하대학교 하이테크 센터 1층 로비

사용자 삽입 이미지

2007년 11월 21일자 빌드 및 소스 코드가 현재 사용 가능합니다. 현재 진행 단계는 Phase #1이며 Phase #1의 최종 마무리는 올해 12월 말로 예정되어있습니다. 많은 피드백과 참여 부탁드리겠습니다.

xPlatform은 Project Blend의 첫 프로젝트로서 Windows, Linux, Unix, Mac OS X 등의 운영 체제에서 사용하는 각종 C 언어 런타임 및 API 함수들에 대한 플랫폼 호출 문맥들을 수집한 라이브러리이며 Microsoft .NET Framework, Microsoft Rotor, Mono, DotGNU Portable .NET을 지원 대상으로하는 Lesser GPL 라이센스 기반의 오픈 소스 라이브러리입니다.

Phase #1에서는 xPlatform의 다양한 가능성을 처음 저울질하는 단계가 될 것이며 다음의 기능들을 포함하고 있습니다.

  • 32비트 버전의 Microsoft Windows용 C Runtime Library에 대한 플랫폼 호출 서비스
  • 특정 프로그래밍 언어를 대상으로 하여 프로토타입 문맥들을 번역하여 제공하는 프로토타입 공유 서비스 (C#, Visual Basic .NET, Managed Extensions for C++ v1.x/v2.0 렌더링 엔진 포함 예정)

Creative Commons License
Creative Commons License
남정현 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다

C#의 __arglist는 MSIL로 번역되면서 Call Instruction에 varargs라는 추가 파라미터를 지정하는 방식으로 사용됩니다. gmcs 컴파일러에서는 Microsoft .NET Stack과의 호환성을 위하여 __arglist 키워드에 대한 정확한 처리를 수행하는 것 처럼 보입니다. 그러나 런타임에서 Microsoft .NET Framework의 경우 이것을 정확히 관리하고 있지만 Mono의 경우 가변 인수를 IL에서 사용할 수 없습니다. 이것은 __arglist가 표준 사양이 아니기 때문에 그렇습니다. 다음은 Mono에서 가변 인수 메서드를 호출할 때 발생하는 예외입니다.

[CODE]
[root@localhost ~]# mono test.exe

Unhandled Exception: System.InvalidProgramException: Invalid IL code in Program:
Main (): IL_0007: call        0x0a000001

[root@localhost ~]

[/CODE]

그러나 가변 인수를 사용하지 않고 필요한 만큼 인수를 직접 선언하는 방법은 유효합니다. 다음과 같이 직접 필요한 인수를 지정하여 플랫폼 호출 선언을 지정하여 사용하는 경우 정상적으로 실행됩니다.

[CODE]
[DllImport("libc", CharSet = CharSet.Ansi, ExactSpelling=true)]
public static extern int printf(string format, int testIntenger);

[/CODE]

xPlatform은 이 부분에 대한 문제 개선을 위하여 동적 플랫폼 호출 선언 관리 클래스를 별도로 구현할 예정에 있으며 이 클래스를 통하여 Mono의 __arglist 비호환성 문제를 비롯하여 타 언어에서도 가변 인수 메서드의 사용을 가능하게 할 것입니다.

Issue Code: XP000002

Creative Commons License
Creative Commons License
남정현 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다