Home > C# > 目的別資料 > Office文書の操作 > Libre Office

CLI言語結合

新規作成日 2017-03-29
最終更新日

CLI Language Binding

CLI(共通の言語基盤構造)言語結合は、CLIプログラムを、オフィスに接続でき、ドキュメントの作成や変換のような、操作を実行できます。 CLIプログラムは、IL(中間言語)コードから構成され、C#やVB .NETコンパイラのような、ツールで作成することができます。結合は、タイプ・セーフなプログラミングを提供します。すべてのUNO型は、CLI型として使用できます。

CLIコンポーネントは、完全にサポートされていません。すなわち、UNOインタフェースをCLI言語で実装することはできますが、オフィスのサービスマネージャーによるインスタンスの作成は、サポートされていません。より正確には、unopkgで、コンポーネントを登録して、実行プログラム内から後で、読み込むことができません。

現在、言語結合は、Windowsオペレーティング・システムでのみ利用できます。

用語

Terms

この文書の中では、次のCLI関連の略号が、使われます。:

  • IL =中間言語 (Intermediate Language)
  • CLI =共通の言語基盤構造 (Common Language Infrastructure)
  • CLR =共通言語ランタイム (Common Language Runtime)
  • CTS =共通型システム (Common Type System)

必要条件

Requirements

言語結合は、OpenOffice.org 2.0の一部で、そして、Windows XPとWindows 2000のような、Windowsプラットホームでのみ利用できます。詳細は、OSが、サポートして、その前提条件が、実現される必要があるMicrosoft .NET Frameworkのドキュメントを参照してください。 Microsoft .NET Framework Version 1.1は、インストールされます。

OpenOffice.org 3.0以降、.NET Framework 3.5が必要です。1つのオフィスしかインストールできません。すなわち、OOoの別のバージョンや別のブランドは、同時にインストールできないかもしれません。

サポートされている言語

Supported Languages

言語バインディングは、一般に、すべてのCLI言語をUNOで使用できるようにする必要があります。しかしながら、不足している機能のため、すべての言語が、適切であるというわけではありません。例えば、UNOは、パラメータを使用するため、CLI言語は、同様に、それをサポートする必要があります。それは、JScript .NETでは提供されていません。

言語結合は、C#とVBコードでうまく検証されました。私たちは、C ++コンパイラが、列挙値の配列と一緒に誤ったILコードを提供することを見つけました。次の例に示すように、これは、例外を発生する可能性があります。

 __value enum Colors {Red, Green, Blue}; 
 
 public __gc class Test
 {
 public:
   static void foo()
   {
       Colors ar[] = new Colors[1];
   ar[0] = Red;
   Object* o = ar->GetValue(0);
   }
 //... 
 }

ar->GetValue(0)を呼び出すとき、続いて、System.ExecutionEngineExceptionが、投げられます。ILを見ると、C#コンパイラで、作成されるコードに、2つの重要な違いを明らかにします。まず、配列arは、Colorsではなく、System.Enumの配列として構築されます。その結果、ar->GetType()は、Colorsの代わりに、System.Enumの型を返します。次に、ar->GetValue()は、"callvirt"の代わりに、"call"命令にコンパイルされます。フレームワーク SDK version 1.1から、コンパイラで編集されるとき、この例でも、同じ例外が発生しました。

回避方法として、あなたは、純粋なSystem.Int32の配列をパラメータとして提供することができます。in/outとoutパラメータには、回避方法がありません。戻り値は、このバグに影響を受けません。

他の問題は、C++が、ジャグ配列をサポートしないことです。System.Arrayの配列を作成することは可能ですが、それは、別の型を持っているので、ジャグ配列の代わりにはなりません。その結果、あなたが、ジャグ配列ではなく、Arrayインスタンスを渡すことを試みる場合、コンパイラは、エラーを生成します。

64bitプラットフォームでの実行

Running on 64 Bit Platforms

Sunによって構築されたOOo 3.0は、32 bit Windows向けに作られていますが、64 bitでも動作します。64bit版で、CLI アプリケーションを実行するには、32 biの.Net Frameworkをインストールする必要があります。(OOo 3.0のversion 3.5)。アプリケーションは、x86プラットホーム向けに構築する必要があります。(プラットホームのcsc.exeの切り換えを参照して下さい)、それ以外の場合には、それは実行しません。anycpuやx64を使用する場合、アプリケーションは、64bit処理で読み込まれます。OOoに接続してブリッジを作成するには、この処理は、32bit DLLであるOOoから、いくつかのdllを読み込む必要があります。これは、動作しません、そして、System.BadImageFormatExceptionが、投げられます。

アプリケーションが、32bitアプリケーションとして、実行するように設定されているかどうかを確認するには、.NET Framework SDKの一部であるcorflags.exeプログラムを使用します。例えば:

corflags myapp.exe

この出力を生成することができます(完了していない)。:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 3
ILONLY    : 1
32BIT     : 0
Signed    : 0

PEフラグの値が、PE32の場合、このバイナリは64bit処理で実行することもできます。32 bitフラグは、このアプリケーションのために作成される処理の種類を制御します。64bitシステムで、32BIT=0の値は、64bit処理をさせます。32BIT=1は、32bit処理の使用を強制します。

アプリケーションが、 "anycpu"でビルドされていた場合、続いて、それは、32 bitフラグを後で変更することが可能です。

これは、32BIT=1を設定します。そして、その結果、アプリケーションが、たとえ、64 bitシステム上で実行されていても、常に、32bit処理で読み込まれます。

OpenOffice.org 3.0の変更

Changes in OpenOffice.org 3.0

cli_types.dllは、cli_oootypes.dllとcli_uretypes.dllによって置き換えられます。そして、両方とも、GACにインストールされています。 cli_uretypes.dllには、UREに利用可能なすべての型が含まれています。(プロジェクトudkapiで定義される)そして、cli_oootype.dllには、すべてのオフィス型が含まれています。(プロジェクトoffapiで定義される)。

この結果、cli_types.dllと結合した、すべてのクライアント・プログラムは、動作しません。それらは、再構築する必要があります。そして、その代わりに、cli_uretypes.dllとcli_oootypes.dllを参照します。

3.0のリリースには、ブリッジが動作するのを妨げるバグが含まれています。(詳細については、問題95255を参照してください)これは、3.0.1で修正されます。

デバッグの目的のために、GACの中へのレジストリ入力の記述とアセンブリのインストールを妨げる/ aスイッチを使ってOOoをインストールすると便利かもしれません。クライアントプログラムを動作させるには、以下のことが必要です。:

  • それ以外の場合には、実行可能な次のクライアントが、GAC内のすべてアセンブリをコピーします。それらは、OpenOffice.org/URE/bin and OpenOffice.org/Basis 3/programフォルダで見つかります。
  • UNO_PATHを、ブランド層のプログラム・フォルダに設定します。例えば、C:\staroffice\Sun\staroffice 9\program
  • 同じコンソールでクライアント・プログラムを実行します

言語結合DLL

The Language Binding DLLs

言語結合は、v 3.0以前の5つのライブラリと、OOo version 3.0より、6つのライブラリから構成されています。これらのいくつかは、プログラマーが処理する必要はありませんが、開発や展開プロセスでは、他のものを使用する必要があります。CLIのためにコンパイルされたすべてのライブラリは、通常のネイティブ・ライブラリと区別するための接頭辞「cli_」が付いています。:

  • cli_uno.dll: これは、管理されたコード(CLI)とUNOの間の対話を理解するためのCLI-UNOブリッジです。それは、public型を提供していません。
  • cli_cppuhelper.dll: ネイティブUNOを起動するために、ブートストラップ・コードを提供します。すなわち、別の言語で実装されるさまざまなUNOサービスを利用します。このアセンブリの型は、常にクライアント・プログラムで使われます。
  • cli_ure.dll: UNOインターフェイスを実装するために役に立つヘルパー・クラスが、含まれています。このアセンブリの型は、必ずしも使用されているわけではありません。
  • cli_types.dll: (OOo 3.0で削除された)コンポーネントとクライアント・プログラムのクラスとインタフェースを提供します。それは、現在オフィスで使用されている、すべてのUNOインターフェイスのコレクションです。このアセンブリの型は、常にクライアント・プログラムで使われます。
  • cli_uretypes.dll: (OOo 3.0以降)URE型を提供します。これらの型は、OOo 3.0以前では、cli_types.dllに含まれていました。
  • cli_oootypes.dll: (OOo 3.0以降)オフィス型を提供します。これらの型は、OOo 3.0以前では、cli_types.dllに含まれていました。
  • cli_basetypes.dll: 名前が示すように、それは、既に、cli_basetypes.dll内の作成されたUNO型のために必要な、いくつかの基底型を提供します。それは、Any型が含まれるので、おそらく、すべてのプログラムは、このライブラリを必要とします。また、cli_uretypes.dllとcli_oootypes.dllは、それに依存しています。
  • これらのライブラリは、OpenOffice.org 2.0で最初に公開されました。cli_uno.dllを除き、グローバル・アセンブリ・キャッシュ(GAC)にインストールされます。

モジュール

Modules

現在、OpenOffice.org 3.0は、次に示すモジュールにCLI-UNOライブラリが含まれています。:

cli_ure:
cli_uno.dll、cli_ure.dll、cli_basetypes.dll、cli_uretypes.dll、cli_cppuhelper.dll

unoil:
cli_oootypes.dll
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」