PIDL 컴파일러 실행

1. Windows

PIDL애드온을 이용하시면 편리하게 PIDL 파일 작성 및 컴파일이 가능하지만 사용할 수 없다면, 아래의 방법으로 PIDL Custom Build 를 설정해 주세요.

1-1. Visual Studio 프로젝트에서 PIDL Custom Build 설정

빌드 설정의 각 세부 내용은 다음과 같습니다

명령줄: <PIDL.exe가 있는 경로>\PIDL.exe "%(FullPath)" -outdir .

설명: Compiling %(Filename).pidl ...

출력: %(RootDir)%(Directory)%(Filename)_common.cpp;%(RootDir)%(Directory)%(Filename)_common.h;%(RootDir)%(Directory)%(Filename)_proxy.cpp;%(RootDir)%(Directory)%(Filename)_proxy.h;%(RootDir)%(Directory)%(Filename)_stub.cpp;%(RootDir)%(Directory)%(Filename)_stub.h;%(Outputs)

추가 종속성: <PIDL.exe가 있는 경로>\PIDL.exe

  • PIDL.exe 는 ProudNet 설치 경로의 util 폴더에 있습니다.

  • Debug, Release 모두 동일하게 설정해야 합니다.

설정이 모두 끝났으면 PIDL 파일을 컴파일하여 아래와 같이 출력되는 것을 확인하실 수 있습니다.

1>---— 빌드 시작: 프로젝트: ..., 구성: Release Win32 ---—
1>Compiling TestC2C.pidl ...
1>빌드 로그가 "..."에 저장되었습니다.
1>ProudNetTest_2005 - 오류: 0개, 경고: 0개
========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========

Visual Studio 2005, 2008 버전은 Custom Build Rules 가 지원되어 PIDL 파일을 추가할 때마다 커스텀빌드 설정을 해주지 않아도 자동으로 설정됩니다. Visaul Studio 2010 이후 버전은 Build customizations 를 사용할 수 있습니다.


2. Linux

Ubuntu에서 오픈소스 Mono 라이브러리 설치 예제 ※ 오픈소스 Mono 프로젝트는 리눅스, 윈도우, Mac OS 모두 지원합니다.

$sudo apt-get install mono-gmcs
$sudo apt-get install mono-runtime


3. C#

C# 언어에서도 RMI를 사용할 수 있어, 이를 위해 PIDL 컴파일러도 C# 언어의 proxy와 stub 코드를 생성합니다.

다음과 같이 실행하면 C# 언어의 proxy와 stub 코드가 생성됩니다. (기존 -clr은 -cs와 동일합니다.)

PIDL.exe -cs <input-file-name>

C# 언어로 만들어지는 proxy와 stub은 공통으로 쓰는 모듈로 사용하는 것이 좋습니다. 이 모듈에는 PIDL 에서와 마찬가지로 C# 프로젝트에서도 PIDL 파일을 입력받아 커스텀 빌드를 해줄 필요가 있습니다.

C2S.pidl을 빌드 후 생성되는 proxy,stub은 다음과 같습니다.

  • C2S_common.cs

  • C2S_proxy.cs

  • C2S_stub.cs

이들 파일을 C# 프로젝트(.csproj)에 포함 시킵니다. 단, 이 파일들은 빌드 결과물이며 읽기 전용 파일에 쓰기 오류가 날 수 있으니, 소스 컨트롤(가령 SVN 등)에는 넣지 말아야 합니다.

.csproj 파일을 편집기로 열어 다음과 같이 수정하는 것을 권장합니다.

<Target Name="BeforeBuild">
<ItemGroup>
<Compile Include="C2S_common.cs" />
<Compile Include="C2S_proxy.cs" />
<Compile Include="C2S_stub.cs" />
</ItemGroup>
 
</Target>
<Target Name="AfterBuild">
</Target>

C# 언어로 생성된 proxy와 stub은 C++ 에서 똑같은 이름을 가진 클래스이며, 사용법 또한 동일합니다.

- RMI proxy, stub 클래스의 public, internal, private 설정

PIDL 컴파일러가 생성하는 proxy, stub, common 클래스의 엑세스 한정자는 기본적으로 internal이 설정됩니다. 이들 클래스는 같은 모듈(혹은 어셈블리) 내에 다른 소스에서 사용될 수 있지만 다른 모듈에서는 사용될 수 없습니다.

하지만 이 클래스들을 모아 놓은 모듈을 따로 빌드하고, 이 모듈에 있는 클래스들을 다른 모듈에서도 사용하고자 할 때, 엑세스 한정자를 public으로 바꾸고 싶으실 수 있습니다.

이러한 경우 PIDL 컴파일러가 생성하는 클래스의 엑세스 한정자 속성을 다음과 같이 설정하세요.

// This will let proxy, stub and common classes to have access modifier 'public'.
[marshaler(clr)=MyMarshaler, access=public]
global MyC2S 3000
{
    Foo(...);
}

Last updated