JPH08502136A - タイプライブラリーへインターフェイスする方法及びシステム - Google Patents

タイプライブラリーへインターフェイスする方法及びシステム

Info

Publication number
JPH08502136A
JPH08502136A JP6510177A JP51017794A JPH08502136A JP H08502136 A JPH08502136 A JP H08502136A JP 6510177 A JP6510177 A JP 6510177A JP 51017794 A JP51017794 A JP 51017794A JP H08502136 A JPH08502136 A JP H08502136A
Authority
JP
Japan
Prior art keywords
type
information
function
class
computer system
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP6510177A
Other languages
English (en)
Inventor
コリン ジェイ アクトン
イーラン ジー カロン
アレン ダブリュー カーター
トム コーベット
マイケル ジェイ ウルフ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JPH08502136A publication Critical patent/JPH08502136A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 タイプライブラリー(204)にインターフェイスする方法及びシステムが提供される。好ましい実施例において、本発明は、タイプライブラリーに対するインターフェイス(203)を定義する。このインターフェイスは、複数のインターフェイス方法(404-411)を有し、これらによりタイプ情報をタイプライブラリーに記憶したりそこから検索したりすることができる。定義されたインターフェイスの複数の具現体が設けられる。タイプ情報をアクセスするために、定義されたインターフェイスを用いてコンピュータプログラムがコンパイルされる。コンパイルされたコンピュータプログラムが実行されるときには、複数の具現体の1つを用いてタイプ情報をアクセスする。好ましい実施例では、タイプライブラリーは、コンパイラーがコンパイル時にタイプのインスタンスを結合できるようにする(早期結合)タイプ情報を含む。

Description

【発明の詳細な説明】 タイプライブラリーへインターフェイスする方法及びシステム発明の分野 本発明は、一般に、タイプ情報を記憶するためのコンピュータ方法及びシステ ムに係り、より詳細には、タイプ情報を言語に独立した仕方で記憶する方法及び システムに係る。先行技術の説明 オブジェクト指向のプログラミング技術を使用すると、複雑なコンピュータプ ログラムを容易に開発することができる。オブジェクト指向の技術をサポートす るプログラミング言語が開発されている。1つのこのようなプログラミング言語 がC++である。このC++プログラミング言語は、マイクロソフトコーポレー ションにより出版された「ザ・C++ランゲッジ・レファレンス」に説明されて おり、これを参考としてここに取り上げる。 オブジェクト指向のプログラミング言語の2つの一般的な特徴は、データのカ プセル化及びデータタイプの継承をサポートすることである。データのカプセル 化とは、データを、データに基づいて動作するファンクションヘ結合することを 指す。継承とは、データのタイプを他のデータのタイプの拡張として定義できる 能力を指す。データとファンクションを結合するデータタイプのインスタンスを 「オブジェクト」と称する。 オブジェクトは、ユーザが定義したタイプ(クラスタイプ)に対するランタイ ム構造体であって、データメンバー及びファンクションメンバーを含むものであ る。各クラスは、そのデータメンバー及びファンクションメンバーを指定するク ラス定義を有する。各オブジェクトは、あるクラスタイプであると宣言される。 好ましい実施例においては、オブジェクトのランタイムデータ構造体は、参考と してここに取り上げる「オブジェクト指向のプログラミング言語のためのコンパ イラーにおいて仮想ファンクション及び仮想ベースを実現する方法(A Method for Implementing Virtual Functions and Virtual Bases in a Com piler for anObject-Oriented Programming Language)」と題する米国特許 出願第07/682,537号に開示されたモデルに一致する。 2つのコンピュータプログラムがオブジェクトの同じインスタンスをアクセス するのがしばしば有用である。例えば、第1コンピュータプログラムは、共用メ モリにおいてオブジェクトをインスタンス生成し、オブジェクトの位置を第2の コンピュータプログラムに知らせる。第2のコンピュータプログラムは、次いで 、共用メモリにおいてオブジェクトをアクセスする。しかしながら、オブジェク トをアクセスするためには、第2のコンピュータプログラムは、オブジェクトの クラス定義で書き込まれてコンパイルされる必要がある。第2のコンピュータプ ログラムは、クラス定義がないと、オブジェクトのデータメンバー及びファンク ションメンバーをいかにアクセスするか分からない。従って、コンピュータプロ グラムは、別のコンピュータプログラムと共用しようとする各オブジェクトごと にクラス定義で書き込まれてコンパイルされる。 あるコンピュータプログラムの開発者が、他のコンピュータプログラムがその オブジェクトにアクセスするのを許そうとするときには、開発者はそのオブジェ クトのクラス定義を公表する。他のコンピュータプログラムの開発者は、次いで その公表されたクラス定義をそれらのコンピュータプログラムに組み込むことが できる。当業者であれば、この公表は、クラス定義を含む「ヘッダ」ファイルを 使用することが明らかであろう。他のコンピュータプログラムの開発者は、次い で、そのヘッダファイルに定義されたオブジェクトをアクセスするようにそれら のコンピュータプログラムを書き込みそしてコンピュータプログラムのソースコ ードにヘッダファイルを「含ませる」ことができる。次いで、ソースコードがコ ンパイルされ、オブジェクトをアクセスする準備ができる。 公知の方法では、コンピュータプログラムを開発するときにクラス定義を使用 できることが必要であるから、独立した開発者によって開発されたコンピュータ プログラム間でのオブジェクトの共用が制限される。この制限された共用は、例 えば、世界中に位置する独立した開発者へ適時にクラス定義を分配することが困 難であるために生じる。同様に、クラス定義に対する更新を分配することも困難 であると共に、開発者がこれらの更新を合体しそしてコンピュータプログラムの 更新したバージョンをユーザヘ分配することも困難である。1つのコンピュータ プログラムが多数の開発者により与えられるクラス定義を組み込むときにはこれ らの問題が複合される。又、標準的なプログラミング言語がないために、1つの プログラミング言語におけるクラス定義を別のものに適応させることは困難であ る。発明の要旨 本発明の目的は、ユーザが定義したタイプを定める情報を記憶しそしてアクセ スするためのシステムを提供することである。 本発明の別の目的は、オブジェクトに結合する情報を記憶しそしてアクセスす るためのシステムを提供することである。 本発明の別の目的は、クラス定義をロードする情報を記憶しそしてアクセスす るためのシステムを提供することである。 本発明の別の目的は、1つのコンピュータプログラムによりインスタンス生成 されたオブジェクトを、ランタイムにおいて、第2のコンピュータプログラムを コンパイル時にクラス定義でコンパイルする必要なく第2のコンピュータプログ ラムによりアクセスできるように、オブジェクトに関連した情報を記憶し、アク セスし、定義し、結合しそしてロードするためのタイプライブラリーインターフ ェイス及び具現体を提供することである。 本発明の別の目的は、言語的に独立し、具現的に独立した予めコンパイルされ たタイプ定義を提供することである。 本発明を以下に説明するときに明らかになるであろうこれら及び他の目的は、 タイプ情報を記憶するタイプライブラリーへインターフェイスする改良されたシ ステム及び方法によって達成される。好ましい実施例において、本発明は、タイ プライブラリーへのインターフェイスを定義する。このインターフェイスは、複 数のインターフェイス方法を有し、これら方法により、タイプ情報をタイプライ ブラリーに記憶しそしてそこから検索することができる。定義されたインターフ ェイスの複数の具現体が設けられる。コンピュータプログラムは、タイプ情報を アクセスするように、定義されたインターフェイスを用いてコンパイルされる。 コンパイルされたコンピュータプログラムが実行されるときには、複数の具現体 の1つを用いてタイプ情報をアクセスする。好ましい実施例において、タイプラ イブラリーは、コンパイラーがコンパイル時にタイプのインスタンスへ結合でき るようにする(早期結合)タイプ情報を含む。図面の簡単な説明 図1は、タイプライブラリーを使用する例示的なコンピュータプログラム及び アプリケーションを示すスクリーンレイアウトである。 図2は、タイプライブラリーの発生を示すブロック図である。 図3は、ワードプロセッサがマクロインタープリターを呼び出すときに使用さ れる例示的要素を示すブロック図である。 図4ないし7は、好ましいタイプライブラリーインターフェイスハイアラーキ を示すブロック図である。 図5は、ITypeMemberオブジェクトのハイアラーキを示すブロック 図である。 図6は、IFuncDescオブジェクトのハイアラーキを示すブロック図で ある。 図7は、ITypeDescオブジェクトのハイアラーキを示すブロック図で ある。 図8は、コードテーブル1のマクロを解読するときにマクロインタープリター が実行するステップを示す図である。 図9は、ルーチンExecuteGlobalFunctionの流れ線図で ある。 図10は、ルーチンGetAddressOfGlobalFunction の流れ線図である。 図11は、ルーチンExecuteFunctionMemberの流れ線図 である。 図12は、ルーチンGetOffsetOfFunctionMemberの 流れ線図である。 図13は、インターフェイスオブジェクトの一般的な構造を示すブロック図で ある。好ましい実施例の詳細な説明 本発明は、あるコンピュータプログラムが、そのオブジェクト(データメンバ ー及びファンクションメンバー)を、そのコンピュータプログラムとは独立して 開発された他のコンピュータプログラムにアクセスできるようにする方法及びシ ステムを提供する。好ましい実施例において、アクセス可能なオブジェクトのタ イプを定める情報は、「タイプライブラリー」に記憶される。タイプライブラリ ーは、コンピュータプログラムのアクセス可能なオブジェクトをアプリケーショ ンに「露呈」する。又、タイプライブラリーは、露呈されたオブジェクトに関す る結合情報も含む。結合情報は、露呈されたオブジェクトのデータ及びファンク ションメンバーへ結合するためにコンパイラーやインタープリターのようなアプ リケーションにより必要とされる情報を含む。結合情報は、インスタンスデータ 内のデータメンバーのオフセットと、仮想ファンクションテーブル内のファンク ションメンバーに対するポインタのオフセットとを含む。又、タイプライブラリ ーは、ロード情報も含むのが好ましい。ロード情報は、グローバルなファンクシ ョン及び変数のアドレスを決定するためにローダのようなアプリケーションによ り必要とされる情報を含む。又、タイプライブラリーは、ライブラリーにおいて 定義されたタイプを記述するドキュメンテーションを含むのが好ましく、或いは 又、より詳細な情報を含むヘルプファイルに対する参照を含んでもよい。アプリ ケーションは、タイプライブラリーの情報に基づいてコンピュータプログラムの オブジェクトをアクセスする。 本発明は、タイプライブラリーに対するインターフェイス(以下に定める)で あって、これを介してコンピュータプログラムの開発者がタイプ定義を記憶しそ してこれを介してアプリケーションがタイプ定義を検索するようなインターフェ イスを提供する。露呈されるべきオブジェクトに対するタイプ定義、結合情報、 及びロード情報は、タイプライブラリーのインターフェイスオブジェクトをイン スタンス生成しそしてファンクションメンバーを呼び出すことによって記憶され る。アプリケーションは、タイプライブラリーのインターフェイスオブジェクト をインスタンス生成しそしてファンクションメンバーを呼び出すことにより、露 呈されたオブジェクトをアクセスする。「アプリケーション」という用語は、コ ンピュータプログラムオブジェクトに露呈されるコードを指す。このコードは、 コンピュータプログラムと同じプロセスで実行することもできるし、或いはそれ とは個別のプロセスで実行することもできる。 インターフェイスは、純粋な仮想ファンクションメンバーのみを含む抽象クラ スであり、即ちこのクラスは、データメンバーも、非仮想ファンクションメンバ ーも有していない。インターフェイスのファンクションメンバーは、通常は、意 味的に関連している。テーブル12は、クラスISampleのインターフェイ スを示している。 テーブル12 class ISample { public:virtual RETCODE func0()=0; virtual RETCODE funcl()=0; virtual RETCODE func2()=0; } インターフェイスは、インターフェイスの具現体のインスタンスへのアクセスを 定める具現的に独立したメカニズムを形成し、これはインターフェイスオブジェ クトと称する。インターフェイスオブジェクトは、インターフェイスのファンク ションメンバーへのアクセスを与えるデータ構造体である。図13は、インター フェイスオブジェクトの一般的な構造を示すブロック図である。インターフェイ スオブジェクトは、インスタンスデータ1301と、仮想ファンクションテーブ ル1302と、ファンクション1303、1304とを備えている。インスタン スデータ1301は、仮想ファンクションテーブルのポインタと、インターフェ イスオブジェクトのファンクションメンバーのみにアクセスできるプライベート データとを含んでいる。仮想ファンクションテーブル1302は、インターフェ イスによって定められた各仮想ファンクションのアドレスを含む。ファンクショ ン1303、1304は、インターフェイスを具現化するコードを含む。 以下の例は、タイプライブラリーの発生と、アプリケーションによるタイプラ イブラリーの使用とを示す。図1は、タイプライブラリーを使用する例示的なコ ンピュータプログラム及びアプリケーションを示したスクリーンレイアウトであ る。コンピュータプログラムは、ウインドウ101を経てユーザと対話するワー ドプロセッサである。このワードプロセッサは、多数のパラグラフ102を含む 「example.doc」と称する文書をオープンしている。このワードプロ セッサは、マクロインタープリター(アプリケーション)を呼び出すためのメニ ュー103を有している。この例において、マクロインタープリターは、呼び出 ししているコンピュータプログラムの同じプロセスの一部分として実行するよう に構成される。マクロインタープリターは、ユーザからのC++のような言語に ステートメントを入力し、そしてそのステートメントを解読する。ユーザがマク ロメニュー103を選択すると、マクロウインドウ104が形成される。ユーザ は、マクロステートメント105を入力し、そしてマクロウインドウ104のラ ンメニューを選択して、マクロステートメントを解釈する。この例においては、 マクロステートメント105は、オープンした文書の各パラグラフを正しく位置 合わせさせる。 この例を続けると、ワードプロセッサの開発者は、タイプ定義、結合情報、ロ ード情報及びドキュメンテーションを含むタイプライブラリーをワードプロセッ サの実行可能なコードと共に公表する。マクロインタープリターの開発者は、そ のC++状の言語の記述を公表する。ワードプロセッサ及びマクロインタープリ ターは、他の特殊な知識なしに開発される。即ち、ワードプロセッサは、予め定 義された名前のファイルに記憶されるマクロインタープリターをロードしそして ユーザがそのマクロメニューを選択したときにそのマクロインタープリターを呼 び出す必要があることだけを知るように開発される。同様に、マクロインタープ リターは、その呼び出しているコンピュータプログラムの露呈されたオブジェク トをアクセスするために呼び出し時にパスしたタイプライブラリーを見る必要が あることだけを知るように開発される。この同じマクロインタープリターは、ス プレッドシートやデータベースプログラムのような他の種類のコンピュータプロ グラムによって呼び出すこともできる。ユーザは、露呈されたワードプロセッサ オブジェクトのタイプ定義のドキュメンテーションと、マクロインタープリター の言語の公表された定義とを使用して、ワードプロセッサに対するマクロを開発 する。マクロインターブリターは、これらのマクロを入力し、そしてワードプロ セッサのタイプライブラリーの情報に基づいてワードプロセッサと対話し、マク ロを解読する。 図2は、タイプライブラリーの発生を示すブロック図である。タイプライブラ リーを発生するために、「タイプライブラリー形成」プログラム202は、ダイ ナミックリンクライブラリー205に含まれたロード情報と共にワードプロセッ サが露呈するオブジェクトのタイプの定義201を入力し、そしてタイプライブ ラリーインターフェイス203を用いてタイプライブラリー204を発生する。 ダイナミックリンクライブラリー205は、定義201で定められたコンパイル されたグローバルなファンクション及びファンクションメンバーを含んでいる。 タイプライブラリー形成プログラム202は、オブジェクトのタイプ定義をタイ プライブラリーに追加すると共に、ダイナミックリンクライブラリー205から 導出されたロード情報を追加する。次いで、プログラムは、結合情報を発生する ように定義を「コンパイル」する。 図3は、ワードプロセッサがマクロインタープリターを呼び出すときに使用さ れる要素を示すブロック図である。ユーザがワードプロセッサ301のマクロメ ニューを選択するときに、ワードプロセッサは、マクロインタープリターコード 302をワードプロセッサ301のアドレススペースにロードする。別の実施例 において、マクロインタープリター302は、個別のプロセスとしてロードする ことができ、そして標準的なプロセス間通信メカニズムを用いてワードプロセッ サ301と通信することができる。マクロインタープリターが呼び出されると、 ユーザは、マクロステートメント303を入力する。マクロインタープリター3 02は、タイプライブラリーのインターフェイスオブジェクト304をインスタ ンス生成して、ワードプロセッサタイプライブラリー305の情報をアクセスす る。この例において、ワードプロセッサ301は、タイプ「ドキュメント」クラ ス及び「パラグラフ」クラスのオブジェクトを露呈する。この例では、ドキュメ ントオブジェクト310は、インスタンスデータ311及び仮想ファンクション テーブル312を含む。仮想ファンクションテーブル312は、ドキュメントク ラスの仮想ファンクションメンバー(例えば、GetPara()313)を具 現化するコードに対するポインタを含む。ファンクションメンバーGetPar aは、オープンドキュメント内の指定のインデックスのパラグラフに対するポイ ンタを発呼側へ返送する。インスタンスデータ311は、仮想ファンクションテ ーブル312のポインタと、ドキュメント内のパラグラフ314のリストのポイ ンタとを含む。これらパラグラフは、0でスタートするインデックスにより順次 に順序付けされる。パラグラフ314のリストは、パラグラフのテキスト及び特 性(例えば、位置合わせ)を含むパラグラフオブジェクト320、330のポイ ンタを含む。ワードプロセッサは、ドキュメント内の各パラグラフに対しパラグ ラフオブジェクトをインスタンス生成する。各パラグラフオブジェクトは、イン スタンスデータ321及び仮想ファンクションテーブル322を含む。仮想ファ ンクションテーブル322は、パラグラフクラスの仮想ファンクションメンバー (例えば、SetJustify()323)を具現化するコードのポインタを 含む。このファンクションメンバーSetJustifyは、パラグラフを指定 の位置合わせにセットする。又、ワードプロセッサは、グローバルなファンクシ ョンGetDoc340を露呈する。その名前が示すように、ファンクションG etDocは、現在オープンしているドキュメントに対するドキュメントオブジ ェクトのポインタを発呼側へ返送する。 コードテーブル1 Macro Justify 1 Document *pdoc 2 Paragraph *ppara 3 pdoc=GetDoc() 4 i=0 5 while(NULL!=(ppara=pdoc->GetPara(i++)) 6 ppara->SetJustify(“right”) EndMacro コードテーブル1は、オープンドキュメントにおける各パラグラフの位置合わ せをセットするマクロステートメントをリストする。ステートメントの左側の番 号は参照用である。ライン1において、マクロは、ドキュメントオブジェクトを 指すように変数pdocを宣言する。ライン2において、マクロは、パラグラフ オブジェクトを指すように変数pparaを宣言する。ライン3において、マク ロは、オープンドキュメントに対するドキュメントオブジェクトを指すように変 数pdocをセットする。ファンクションGetDocは、ドキュメントオブジ ェクトに対するポインタを返送する。ライン4において、マクロは変数iを0に セットする。変数iは、パラグラフを通してインデックスするのに使用される。 ライン5及び6において、マクロは各パラグラフを通してループし、その位置合 わせを正しい位置合わせにセットする。ドキュメントクラスのファンクションメ ンバーGetParaは、そのパラメータによりインデックスされたパラグラフ に対するポインタをその値として返送する。パラメータがオープンドキュメント におけるパラグラフの数より大きい場合には、ファンクション返送値がNULL にセットされる。パラグラフクラスのファンクションメンバーSetJusti fyは、パラグラフを正しい位置合わせにセットする。マクロインタープリター がコードテーブル1のマクロを解読するために実行するステップについて、以下 に述べる。 又、タイプライブラリーは、アプリケーションがタイプライブラリーにおいて 定義されたオブジェクトのインスタンスを形成できるようにするのにも使用され る。例えば、タイプライブラリーは、指定のタイプのインスタンスを生成してそ のインスタンス生成されたオブジェクトに対するポインタを返送するファンクシ ョンCreatelnstanceを与えることができる。次いで、アプリケー ションは、オブジェクトをアクセスすることができる。上記例のマクロインター プリターは、オブジェクトであるタイプパラグラフをインスタンス生成し、その 方法を用いてオブジェクトにデータを記憶し、そしてドキュメントオブジェクト の方法を用いてパラグラフオブジェクトをドキュメントに追加する。 タイプライブラリーインターフェイス タイプライブラリーインターフェイスは、オブジェクトタイプ情報、結合情報 及びロード情報を定義しそしてアクセスするためのメカニズムを形成する。好ま しい実施例において、タイプライブラリーインターフェイスは、次のインターフ ェイスを含む。 ITypeLib ITypeInfo ITypeBind ITypeFixups ITYpeMembers IVarInfo ITypeDesc IFuncInfo IFuncDesc IParamInfo 各タイプライブラリーインターフェイスの具現体は、対応するインターフェイス オブジェクトを有する。タイプライブラリーインターフェイスはハイアラーキに おいて定義される。 図4ないし7は、タイプライブラリーのインターフェイスハイアラーキを示す ブロック図である。当業者であれば、図示されたハイアラーキは、1つの具現化 におけるインターフェイスオブジェクトのデータ構造レイアウトを表しているこ とが明らかであろう。他のデータ構造レイアウトも使用できる。(図4を参照す れば、テンプレートインターフェイスオブジェクト401は、図4ないし7に使 用されるインターフェイスオブジェクトレイアウトを表している。各インターフ ェイスオブジェクトは、インターフェイスのファンクションメンバーのポインタ を含む仮想ファンクションテーブルを指す仮想ファンクションテーブルポインタ 412と、ブライベートデータメンバー413とを含む。)タイプライブラリー インターフェイスハイアラーキの基部には、ITypeLibインターフェイス オブジェクト402がある。各タイプライブラリーは、1つのITypeLib インターフェイスオブジェクトである。(以下の説明において、「ITypeL ibインターフェイスオブジェクト」という用語は、「ITypeLibオブジ ェクト」と省略する。)ITypeLibオブジェクト402は、タイプライブ ラリーに含まれたオブジェクトタイプ定義に対するポインタ403のリストを指 すポインタを含む。オブジェクトタイプ定義は、0からスタートして順次に順序 付けされる。上記リストにおける各ポインタは、ITypeInfoオブジェク ト404、405を指す。各ITypeInfoオブジェクトは、1つのオブジ ェクトタイプの定義、結合及びロード情報を含む。各ITypeInfoオブジ ェクトは、ItypeMembersオブジェクト406、ITypeBind オブジェクト407及びITypeFixupsオブジェクト408に対するポ インタを含む。 図5は、ITypeMembersオブジェクトより低いハイアラーキを示す ブロック図である。各ITypeMembersオブジェクトは、データメンバ ー、ファンクションメンバー、及びコンテナオブジェクトタイプのベースメンバ ーの定義を含む。インターフェイスオブジェクトに対するコンテナオブジェクト タイプは、インターフェイスオブジェクトが下降してくるところのITypeI nfoオブジェクトにおいて定義されたオブジェクトタイプを指す。IType Membersオブジェクト501は、ポインタ510、520及び530の3 つのリストを指すポインタを含む。ポインタ510のリストは、コンテナオブジ ェクトタイプのファンクションメンバー定義に対するポインタを含む。ポインタ 520のリストは、コンテナオブジェクトタイプのデータメンバー定義に対する ポインタを含む。ポインタ530のリストは、コンテナオブジェクトタイプのベ ースクラス定義に対するポインタを含む。1つの実施例において、本発明は多数 の継承をサポートする。ファンクションメンバーの定義、データメンバーの定義 及びベースメンバーの定義各々は、0からスタートして順次に順序付けされる。 ファンクションメンバー定義に対する各ポインタは、IFuncInfoオブジ ェクト511、512を指す。各IFuncInfoオブジェクトは、コンテナ オブジェクトタイプの1つのファンクションメンバーの定義を含む。各IFun clnfoオブジェクトは、ファンクションメンバーの正式なパラメータを定義 するIFuncDescオブジェクト513に対するポインタを含む。データメ ンバー定義に対する各ポインタは、IVarInfoオブジェクト521、52 2を指す。各IVarInfoオブジェクトは、データメンバー又はベースメン バーの定義を含む。各IVarInfoオブジェクト521、522は、データ メンバーのタイプを定義するITypeDesc523のポインタを含む。ベー スメンバー定義に対する各ポインタは、ベースメンバーのタイプを定義するIT ypelnfoオブジェクト531、532を指す。 図6は、IFuncDescオブジェクトより下のハイアラーキを示すブロッ ク図である。IFuncDescオブジェクト601は、ファンクションメンバ ーの返送タイプを定義するITypeDescオブジェクト602のポインタ、 ファンクションメンバーの正式なパラメータに対するポインタ603のリストを 指すポインタ、及びファンクションメンバーのTHISポインタのタイプを定義 するITypeDescオブジェクト607のポインタを含む。各IParam Infoオブジェクト604、605は、正式パラメータのタイプを定義するI TypeDescオブジェクト606を指す。 図7は、ITypeDescオブジェクトより下のハイアラーキを示すブロッ ク図である。ITypeDescオブジェクトは、オブジェクトタイプの種々の 要素のタイプを定義する(例えば、データメンバー、正式パラメータ、ベースメ ンバー)。ITypeDescオブジェクト701は、要素のベース(以下に述 べる)のタイプを定義するITypeDescオブジェクト702に対するポイ ンタ、要素が指すファンクションのタイプを定義するIFuncDescオブジ ェクト703に対するポインタ、及びユーザが定義したタイプを定めるITYp eInfoオブジェクト704に対するポインタを任意に含む。 テーブル1ないし11は、タイプライブラリーインターフェイスを定義する。 方法インターフェイスの各々は、以下に詳細に述べる。インターフェイスオブジ ェクトのデータメンバーは記憶され、そして方法を用いて検索される。データを 検索する方法は、その前に「Get」が付けられ、そしてデータを記憶する方法 は、その前に「Set」が付けられる。例えば、タイプライブラリーの名前は、 方法ITypeLib::SetNameによって記憶され、そして方法ITy peLib::GetNameにより検索される。これら方法のパラメータは、 パラメータとしてパスした情報を示唆するように名前が付けられタイプ分けされ る。 テーブル1 classITypeLib { virtual UNIT GetTypeinfoCount()=0; virtual SCODE GetTypeInfo(UNIT index,ITypeInfo**Ipipitinfo)=0; virtual SCODE GetDocumentation(BSTR*IpbstrDoc)=0; virtual SCODE GetHelpFileName(BSTR*IpbstrFileName)=0; virtual DWORD GetHelpContext()=0; virtual SCODE GetTypeBind(ITypeBind**Ipipitbind)=0; virtual SCODE GetIndex0fName(LPSTRszName,WORD*pwindex)=0; virtual SCODE GetFunctionId(LPSTRszFunctionName, BSTR*IpbstrFunctionId=0; virtual UNIT GetFunctionIdCount()=0; virtual SCODE GetFunctionId0fIndex(UNIT index, BSTR*IpbstrFunctionld)=0; virtual SCODE GetName(BSTR*lpbstrName)=0; virtual WORD GetLanguageCode()=0; virtual SCODE GetTypeName(UNIT index BSTR*Ipbstr)=0; virtual SCODE GetTypeDocumentation(UNIT index BSTR*IPbstrDoc)=0; virtual SCODE SetDocumentation(LPSTR IpstrDo)=0; virtual SCODE SetHelpFileName(LPSTR IpstrFileName)=0; virtual SCODE SetHelpContext(DWORD dwHelpContext)=0; virtual SCODE SetName(LPSTRszName)=0; virtual SCODE SetLanguageCode(WORD wLangeCode)=0; virtual SCODE AddTypeInfo(ITypeInfo*Iptinfo,LPSTRszName)=0; virtual SCODE RemTypeInfo(UNIT i)=0; } ITypeLibインターフェイス ITypeLibインターフェイスは、ITypeLibオブジェクトの方法 を定義する。アプリケーションは、ファンクションOpenTypeLibra ryを用いて、指定された名前のタイプライブラリーをオープンし、そのオープ ンタイプライブラリーに対応するITypeLibオブジェクトをインスタンス 生成し、そしてそのインスタンス生成されたITypeLibオブジェクトに対 するポインタを返送する。ITypeLibオブジェクトの方法は、IType Infoオブジェクトを追加及び除去し、タイプライブラリーの記述情報(例え ば、ヘルプファイル、タイプライブラリーの名前)を記憶及び検索し、タイプラ イブラリー内のITypeInfoオブジェクトを検索し、そしてタイプライブ ラリーにおいて定義されたファンクション及びデータに対する結合及びロード情 報を検索するという機能を与える。 好ましい実施例においては、タイプライブラリーは、C++状クラス、C++ 状列挙子、並びにグローバルなファンクション及びデータを定義する情報を記憶 することができる。 ITypeLib::GetTypeInfoCount 方法GetTypeInfoCountは、このITypeLibオブジェク トに含まれたITypeInfoオブジェクトの数を検索する。(以下の説明に おいて、インターフェイスオブジェクトの前の「この(this)」という用語 は、方法が呼び出されるところのインスタンスを指す。)この方法は、上記数を その値として返送する。この数は、オブジェクトタイプ定義403のリストにお けるポインタの数に対応する。 ITypeLib::GetTypelnfo 方法GetTypeInfoは、このITypeLibオブジェクトに対して 指定されたインデックスのITypeInfoオブジェクトを検索する。(以下 の説明において、「指定された」という用語は、方法のパラメータを指す。)こ の方法は、検索されたITypeInfoオブジェクトに対するポインタをパラ メータとして返送する。 ITypeLib::GetDocumentation 方法GetDocumentationは、このITypeLibオブジェク トの簡単な記述を含むストリングを検索する。このストリングは、このITyp eLibオブジェクトの記述を含み、一般に「ブラウザ」によって使用される。 ブラウザとは、タイプライブラリー内のオブジェクトタイプ定義をユーザに表示 するアプリケーションを指す。例えば、上記例のマクロインタープリターは、ワ ードプロセッサ又はタイプライブラリーを用いてワードプロセッサのオブジェク トタイプ定義を表示するブラウズモードをもつことができる。この方法は、検索 されたストリングのポインタをパラメータとして返送する。 ITypeLib::GetHelpFileName 方法GetHelpFileNameは、このITypeLibオブジェクト に対するヘルプファイルのファイル名を含むストリングを検索する。ヘルプファ イルは、ユーザを助成するのに有用な情報を含む。この方法は、検索されたスト リングに対するポインタをパラメータとして返送する。 ITypeLib::GetHelpContext 方法GetHelpContextは、このITypeLibオブジェクトに 対しヘルプファイルのコンテクストを検索する。ヘルプコンテクストは、該当情 報のヘルプファイル内の位置を指示する。この方法は、検索されたヘルプコンテ クストをパラメータとして返送する。 ITypeLib::GetTypeBind 方法GetTypeBindは、このITypeLibオブジェクトに対する ITypeBindオブジェクトを検索する。この方法は、検索されたITyp eBindオブジェクトのポインタをパラメータとして返送する。検索されたI TypeBindオブジェクトは、このITypeLibオブジェクト内の全て のグローバルなファンクション及びグローバルなデータに対する結合情報をアプ リケーションが検索できるようにする。検索されたITypeBindオブジェ クトの機能は、タイプカインド(type kind)のMODULE(以下を参照)を 有するこのITypeLibオブジェクト内の全てのITypeInfoオブジ ェクトをインスタンス生成することにより与えることができるが、この方法は、 より効率的なメカニズムを具現化できるようにする。 ITypeLib::GetIndexOfName 方法GetIndexOfNameは、このITypeLibオブジェクトに 対し指定された名前のITypeInfoオブジェクトのインデックスを検索す る。この方法は、検索されたインデックスをパラメータとして返送する。 ITypeLib::GetName この方法GetNameは、このITypeLibオブジェクトの名前を検索 する。この方法は名前をパラメータとして返送する。名前は、タイプライブラリ ーと共に定義されたアクセスタイプをサポートするコンパイラーによって使用さ れるものとする。例えば、ステートメント「WP:Document *pdo c」は、タイプ−−「WP:Document」−−が「WP」という名前のタ イプライブラリーにおいてタイプ名「Document」として定義されたこと をコンパイラーに指示する。 ITypeLib::GetLanguageCode 方法GetLanguageCodeは、このITypeLibオブジェクト に対する言語識別子を検索する。言語識別子は、このITypeLibオブジェ クトにおける名前及びオブジェクトの自然言語(例えば、英語、フランス語)を 指示する。この方法は、言語識別子をその値として返送する。 ITypeLib::GetTypeName 方法GetTypeNameは、このITypeLibオブジェクトの指定の インデックスのITypeInfoオブジェクトの名前を検索する。この方法は ITypeInfoオブジェクトをロードせずにオブジェクトタイプ名を検索す るためのメカニズムを与える。この方法は、検索された名前をパラメータとして 返送する。 ITypeLib::GetTypeDocumentation 方法GetTypeDocumentationは、このITypeLibオ ブジェクトの指定のインデックスのITypeInfoオブジェクトの記述を含 むストリングを検索する。この方法は、ITypeInfoオブジェクトをロー ドせずにオブジェクトタイプドキュメンテーションを検索するためのメカニズム を与える。この方法は、検索されたストリングをパラメータとして返送する。 ITypeLib::SetDocumentation 方法SetDocumentationは、指定されたストリングをこのIT ypeLibオブジェクトに対するドキュメンテーションとして記憶する。 ITypeLib::SetHelpFileName 方法SetHelpFileNameは、指定されたストリングをこのITy peLibオブジェクトに対するヘルプファイル名として記憶する。 ITypeLib::SetHelpContext 方法SetHelpContextは、指定されたヘルプコンテクストをこの ITypeLibオブジェクトに対するヘルプコンテクストとして記憶する。 ITypeLib::SetName 方法SetNameは、指定されたストリングをこのITypeLibオブジ ェクトの名前として記憶する。 ITypeLib::SetLanguageCode 方法SetLanguageCodeは、指定されたコードをこのIType Libオブジェクトの言語コードとして記憶する。 ITypeLib::AddTypelnfo 方法AddTypeInfoは、指定された名前をもつ指定されたIType InfoオブジェクトをこのITypeLibオブジェクトに追加する。ITy pelnfoオブジェクトは、ルーチンCreateTypeInfo(以下に 述べる)と共に形成される。 ITypeLib::RemTypeInfo 方法RemTypeInfoは、このITypeLibオブジェクトから指定 のインデックスのITypeInfoオブジェクトを除去する。 別の実施例において、タイプライブラリーにおいて定義された各グローバルな ファンクションには独特のファンクション識別子が指定される。ITypeLi bインターフェイスは、ファンクション識別子を用いてグローバルなファンクシ ョンに関する情報を検索できるようにする方法を与える。情報は、ファンクショ ン名を含むストリングを使用するのではなくファンクション識別子を使用するこ とにより更に効率的に検索することができる。 テーブル2 classITypeInfo{ virtual SCODE GetName(BSTR*lpbstrName)=0; virtual SCODE GetTypeMembers(ITypeMembers**lplptmembers=0; virtual SCODE GetTypeBind(ITypeBind**llptbind)=0; virtual SCODE GetTypeFixups(ITypeFixups**lplptfixups)=0; virtual TYPEKIND GetTypeKind()=0; virtual SCODE CreateInstance(VOID**ppobject)=0; virtual WORD GetLanguageCode()=0; virtual SCODE GetDocumentation(BSTR*lpbstrDoc)=0; virtual SCODE GetHelpFileName(BSTR*lpbstrFileName)=0; virtual DWORD GetHelpContext()=0; virtual ALIGNKIND GetAlignmentKind()=0; virtual BOOL IsModifiable()=0; virtual SCODE SetName(LPSTR lpstrName)=0; virtual SCODE SetTypeKind(TYPEKIND typekind)=0; virtual SCODE SetDocumentation(LPSTR lpstrDoc)=0; virtual SCODE SetHelpContext(DWORD dwHelpContext)=0; virtual SCODE SetAlignmentKind(ALIGNKIND alignkind)=0; } ITypeInfoインターフェイス ITypeInfoインターフェイスは、ITypeInfoオブジェクトの 方法を定義する。ITypeInfoオブジェクトは、ITypeMember sオブジェクト、ITypeBindオブジェクト及びITypeFixups オブジェクトを指す。オブジェクトを指すこれらの各々は、異なるアプリケーシ ョンが効率的な仕方でアプリケーションにより必要とされる情報をアクセスする ためのメカニズムを与える。例えば、ブラウザは、ITypeMembersオ ブジェクトを使用してコンテナオブジェクトタイプの定義をユーザへ表示するこ とができる。(ブラウザは、タイプライブラリーの情報をユーザに表示するアプ リケーションである。)コンパイラー又はインタープリターは、ITYpeBi ndオブジェクトを使用して、データメンバー及びファンクションメンバーのオ フセットを検索する。ローダは、ITypeFixupsオブジェクトを使用し て、コンテナオブジェクトタイプのスタティックデータメンバー及びスタティッ クファンクションメンバーのアドレスを決定する。テーブル2は、ITypeI nfoインターフェイスをリストする。 各ITypeInfoオブジェクトは指定の「タイプカインド(type kind) 」をを有する。好ましい実施例では、このタイプカインドは、ENUM、REC O RD、MODULE、CLASS、ALIAS及びUNIONを含む。ENUM タイプカインドは、C+十状列挙子である。RECORDタイプカインドは、フ ァンクションメンバーもベースメンバーも持たないC++状クラスである。MO DULEタイプカインドは、非クラスファンクション及びデータの集合である。 CLASSタイプカインドは、C+十状クラスである。ALIASタイプカイン ドは、C+十状タイプ定義である。UNIONタイプカインドは、C++状ユニ オンである。 ITypelnfo::GetName 方法GetNameは、このITypeInfoオブジェクトによって定義さ れたオブジェクトタイプの名前を検索する。この方法は、名前をパラメータとし て返送する。 ITypeInfo::GetTypeMembers 方法gGetTypeMembersは、このITypeInfoオブジェク トによって定義されたオブジェクトタイプのITypeMembersオブジェ クトを検索する。このITypeInfoオブジェクトがインスタンス生成され た後にこの方法が最初に呼び出されたときには、検索されたITypeMemb ersオブジェクトが初期化され、そのメンバーリストが空となる。この方法は 検索されたITypeMembersオブジェクトのポインタをパラメータとし て返送する。 ITypeInfo::GetTypeBind 方法GetTypeBindは、このITypeInfoオブジェクトにより 定義されたオブジェクトタイプのITypeBindオブジェクトインスタンス を検索する。このITypeInfoオブジェクトがインスタンス生成された後 にこの方法が最初に呼び出されたときには、検索されたITypeBindオブ ジェクトは初期化されない。この方法は、検索されたITypeBindオブジ ェクトのポインタをパラメータとして返送する。 ITypeInfo::GetTypeFixups 方法GetTypeFixupsは、このITypeInfoオブジェクトに より定義されたオブジェクトタイプのITypeFixupsオブジェクトを検 索する。このITypeInfoオブジェクトがインスタンス生成された後にこ の方法が最初に呼び出されたときには、検索されたITypeFixupsオブ ジェクトは初期化されない。この方法は、検索されたITypeFixupsオ ブジェクトのポインタをパラメータとして返送する。 ITypeInfo::GetTypeKind 方法GetTypeKindは、このITypeInfoオブジェクトにより 定義されたオブジェクトタイプのタイプカインドを検索する。この方法は、検索 されたタイプカインドをその値として返送する。 ITypeInfo::GetLanguageCode 方法GetLanguageCodeは、このITypeInfoオブジェク トにより定義されたオブジェクトの言語識別子を検索する。言語識別子は、この ITypeInfoオブジェクトにおけるテキストの自然言語(例えば、英語や フランス語)を指示する。この方法は、言語識別子をその値として返送する。 ITypeInfo::CreateInstance 方法CreateInstanceは、このITypeInfoオブジェクト により定義されたオブジェクトのインスタンスを形成する。この方法は、このI TypeInfoオブジェクトにより定義されたオブジェクトのタイプカインド がCLASSでない場合にエラーを返送する。この方法は、インスタンス生成さ れたオブジェクトのポインタを返送する。 ITypeInfo::GetDocumentation 方法GetDocumentationは、このITypeInfoオブジェ クトにより定義されたオブジェクトタイプを記述する簡単なドキュメンテーショ ンを含むストリングを検索する。この方法は、検索されたストリングをパラメー タとして返送する。 ITypeInfo::GetHelpFileName 方法GetHelpFileNameは、このITypeInfoオブジェク トにより定義されたオブジェクトタイプに対するヘルプファイルのファイル名を 含むストリングを検索する。この方法は、検索されたストリングをパラメータと して返送する。 ITypeInfo::GetHelpContext 方法GetHelpContextは、このITypeInfoオブジェクト により定義されたオブジェクトタイプに対するヘルプファイルのヘルプコンテク ストを検索する。この方法はヘルプコンテクストをパラメータとして返送する。 ITypeInfo::GetAlignmentKind 方法GetAlignmentKindは、このITypeInfoオブジェ クトにより定義されたオブジェクトタイプのオブジェクトをインスタンス生成す るときに使用されるべきアライメント(整列)を検索する。この方法は、アライ メントをその値として返送する。 ITypeInfo::IsModifiable 方法IsModifiableは、このITypeInfoオブジェクトによ り定義されたオブジェクトタイプを変更できるかどうかを指示するフラグを検索 する。オブジェクトタイプ定義は、例えば、タイプライブラリーのユーザが定義 を変更するのを防止するために、変更可能にされない。この方法は、フラグをそ の値として返送する。 ITypeInfo::SetName 方法SetNameは、指定された名前を、このITypeInfoオブジェ クトにより定義されたオブジェクトタイプの名前として記憶する。 ITypeInfo::SetTypeKind 方法SetTypeKindは、指定されたタイプカインドを、このITyp eInfoオブジェクトにより定義されたオブジェクトタイプのタイプカインド として記憶する。 ITypeInfo::SetDocumentation 方法SetDocumentationは、指定されたストリングを、このI TypeInfoオブジェクトにより定義されたオブジェクトタイプのドキュメ ンテーションとして記憶する。 ITypeInfo::SetHelpContext 方法SetHelpContextは、指定されたヘルプコンテクストを、こ のITypeInfoオブジェクトにより定義されたオブジェクトタイプのヘル プコンテクストとして記憶する。 ITypeInfo::SetAlignmentKind 方法SetAlignmentKindは、指定されたアライメント(整列) を、このITypeInfoオブジェクトにより定義されたオブジェクトタイプ のオブジェクトに対するアライメントとして記憶する。 テーブル3 class ITypeMembers{ virtual SCODE GetTypeInfoContainer(ITypeInfo**lplptinfoContainer)=0; virtual UNIT GetFuncCount()=0; virtual SCODE GetFunc(UNITindex,IFuncInfo**lplpfinfoFunc)=0; virtual UNIT GetVarCount()=0; virtual SCODE GetVar(UNITindex,IVarInfo**lplpvinfoVar)=0; virtual SCODE GetBase(ITypeInfo**lplptinfoBase)=0; virtual VARTYPE GetVarTypeEnumimpl()=0; virtual BOOL IsLaid0ut()=0; virtual SCODE GetTypeDescPvft(ITYpeDesc**lplpdesc)=0; virtual SCODE GetTypeDescAlias(ITYpeDesc**lplptdesc)=0; virtual SCODE GetMemberInfo0fHmember(HMEMBER hmember, IMemberInfo**lplpminfo=0; virtual SCODE AddFunc(UNIT index,IFuncInfo*lpfinfoFunc)=0; virtual SCODE RemFunc(UNIT index)=0; virtual SCODE AddVar(UNIT index,IVarInfo*lpvinfoVar)=0; virtual SCODE RemVar(UNIT index)=0; virtual SCODE SetBase(ITypeInfo*lptinfoBase)=0; virtual SCODE MakeLaidOut()=0; virtual SCODE SetVarTypeEnumimpl(VARTYPEvt)=0; virtual SCODE SetTypeDescPvft(ITypeDesc*lptdescPvft)=0; virtual SCODE SetTypeDescAlias(ITypeDesc*lptdescAlias)=0; } ITypemembersインターフェィス ITypeMembersインターフエイスは、ITypeMembersオ ブジェクトの方法を定義する。上記のように、ITypeMembersオブジ ェクトは、コンテナオブジェクトタイプのベースメンバー、データメンバー及び ファンクションメンバーを定義する。ベースメンバーのタイプを繰り返し処理す ることによりオブジェクトタイプの完全なハイアラーキを形成できる。テーブル 3は、ITypeMembersインターフェイスをリストする。ITypeM embersインターフェイスは、そのコンテナオブジェクトタイプ内のメンバ ーを識別するのに使用されるメンバーハンドルを定義する。このメンバーハンド ルは、メンバー名を含むストリングを使用するよりも、メンバーを識別するより 効率的な方法を与える。 ITypemembers::GetTypeInfoContainer 方法GetTypeInfoContainerは、このITypeMemb ersオブジェクトを含むITypeInfoオブジェクトを検索する。この方 法は、検索されたITypeInfoオブジェクトのポインタをパラメータとし て返送する。ITypeMembersオブジェクトが形成されるときには、そ のインスタンスデータは、コンテナITypeInfoオブジェクトの指示を含 む。この方法は、タイプの属性(例えば、そのITypeBindインターフェ イス)を検索するのに使用できる。 ITypemembers::GetFuncCount 方法GetFuncCountは、このITypeMembersオブジェク トにより定義されたコンテナオブジェクトタイプについて定めたファンクション メンバーの数を検索する。この方法は検索された数をその値として返送する。 ITypemembers::GetFunc 方法GetFuncは、このITypeMembersオブジェクトにより定 義されたコンテナオブジェクトタイプの指定のインデックスでファンクションメ ンバーを定めるIFuncInfoオブジェクトを検索する。この方法は検索さ れたIFuncInfoオブジェクトのポインタをパラメータとして返送する。 ITypemembers::GetVarCount 方法GetVarCountは、このITypeMembersオブジェクト により定義されたコンテナオブジェクトタイプについて定められたデータメンバ ーの数を検索する。この方法は、上記数をその値として返送する。 ITypemembers::GetVar 方法GetVarは、このITypeMembersオブジェクトにより定義 されたコンテナオブジェクトタイプの指定のインデックスでデータメンバーを定 めるIVarInfoオブジェクトを検索する。この方法は、検索されたIVa rlnfoオブジェクトのポインタをパラメータとして返送する。 ITypemembers::GetBase 方法GetBaseは、ベースメンバーを定めるITypeInfoオブジェ クトがもしあれば、そのポインタを検索する。この方法は、ITypeInfo オブジェクトに対するポインタをパラメータとして返送する。 ITypemembers::GetVarTypeEnumImpl 方法GetVarTypeEnumImplは、このITypeMember sオブジェクトにより定義された列挙子の一体的タイプを検索する。このITy peMembersオブジェクトにより定義されたコンテナオブジェクトタイプ がENUMタイプカインドでない場合には、この方法はエラーを返送し、さもな くば、この方法は一体的タイプをその値として返送する。 ITypemembers::IsLaidOut 方法IsLaidOutは、このITypeMembersオブジェクトによ り定義されたコンテナオブジェクトタイプが首尾良くコンパイルされたかどうか 示すフラグを検索する。コンパイルプロセスは結合情報を発生し、アプリケーシ ョンが結合情報を用いてコンテナオブジェクトタイプのオブジェクトをアクセス できるようにする。この方法は、検索されたフラグをその値として返送する。 ITypemembers::GetTypeDescPvft 方法GetTypeDescPvftは、このITypeMembersオブ ジェクトにより定義されたコンテナオブジェクトタイプで定められたコンテナオ ブジェクトタイプの仮想ファンクションテーブルポインタのタイプ(例えば、一 定、近、遠、等)を定義するITypeDescオブジェクトを検索する。コン テナオブジェクトタイプが一次仮想ファンクションテーブルポインタを有してい ない場合には、この方法はポインタをNULLにセットする。この方法は、検索 されたポインタをパラメータとして返送する。 ITypemembers::GetTypeDescAlias 方法GetTypeDescAliasは、このITypeMembersオ ブジェクトにより定義されたコンテナオブジェクトタイプがエイリアスであると ころのタイプを定義するITypeDescオブジェクトを検索する。コンテナ オブジェクトタイプがALIASタイプカインドでない場合には、この方法は、 ポインタをNULLにセットする。この方法は、検索されたITypeDesc オブジェクトに対するポインタをパラメータとして返送する。 ITypemembers::GetMemberInfoOfHmembe 方法GetMemberInfoOfHmemberは、このITypeMe mbersオブジェクトにより定義されたコンテナオブジェクトタイプに対する 指定のメンバーハンドルでメンバーを定義するIMemberInfoオブジェ クトを検索する。この方法は、検索されたIMemberInfoオブジェクト に対するポインタをパラメータとして返送する。 ITypemembers::AddFunc 方法AddFuncは、このITypeMembersオブジェクトにより定 義されたコンテナオブジェクトのファンクションメンバーのリストにおける指定 のインデックスの前にファンクションメンバーを定義する指定のIFuncIn foオブジェクトのコピーを追加する。コンテナオブジェクトタイプに現在定義 されているファンクションメンバーの数に等しいインデックスを指定することに より新たなファンクションを添付することができる。 ITypemembers::RemFunc 方法RemFuncは、このITypeMembersオブジェクトにより定 義されたコンテナオブジェクトタイプのファンクションメンバーのリストから、 指定のインデックスをもつIFuncInfoオブジェクトを除去する。この除 去後に、指定のインデックスより大きなファンクションメンバーのインデックス が減少される。 ITypemembers::AddVar 方法AddVarは、このITypeMembersオブジェクトにより定義 されたコンテナオブジェクトタイプのデータメンバーのリストにおいて指定のイ ンデックスの前にデータメンバーを定義する指定のIVarInfoオブジェク トのコピーを追加する。コンテナオブジェクトタイプに現在定義されているデー タメンバーの数に等しいインデックスを指定することにより新たなデータメンバ ーが添付されてもよい。 ITypemembers::RemVar 方法RemVarは、このITypeMembersオブジェクトにより定義 されたコンテナオブジェクトタイプのデータメンバーのリストから、指定のイン デックスをもつIVarInfoオブジェクトを除去する。その除去後に、指定 のインデックスより大きいデータメンバーのインデックスが減少される。 ITypemembers::SetBase 方法SetBaseは、ベースクラスを指定のITypeInfoにセットす る。 ITypemembers::MakeLaidOut 方法MakeLaidOutは、このITypeMembersオブジェクト により定義されたコンテナオブジェクトタイプをコンパイルする。 ITypemembers::SetVarTypeEnumImpl 方法SetVarTypeEnumImplは、このITypeMember sオブジェクトにより定義されたコンテナオブジェクトタイプの列挙子の一体的 タイプを記憶する。 ITypemembers::SetTypeDescPvft 方法SetTypeDescPvftは、このITypeMembersオブ ジェクトにより定義されたコンテナオブジェクトタイプの仮想ファンクションテ ーブルポインタのタイプを記憶する。 ITypemembers::SetTypeDescAlias 方法SetTypeDescAliasは、このITypeMembersオ ブジェクトにより定義されたコンテナオブジェクトタイプがエイリアスであると ころのオブジェクトタイプを記憶する。 テーブル4 class IMemberInfo { virtual SCODE GetName(BSTR*lpbstrName)=0; virtual HMEMBER GetHMember()=0; virtual SCODE GetDllEntry(BSTR*lpbstrFile,DWORD*lpdwDllOrdinal)=0; virtual SCODE GetDocumentation(BSTR*lpbstrDoc)=0; virtual DWORD GetHelpContext()=0; virtual SCODE GetTypeInfoContainer(ITypeInfo**lplptinfo)=0; virtual SCODE SetName(LPSTR szName)=0; virtual SCODE SetHmember(HMEMBER hmemberVar)=0; virtual SCODE SetDllEntry(LPSTR szFile,DWORD dwDllOrdinal)=0; virtual SCODE SetDocumentation(LPSTR szDoc)=0; virtual SCODE SetHelpContext(DWORD dwHelpContext)=0; }; IMemberInfoインターフェイス IMemberInfoインターフェイスは、IMemberInfoオブジ ェクトの方法を定義する。IMemberInfoインターフェイスは、IVa rInfo及びIFuncInfoインターフェイスに対するベースクラスとし て働く。IMemberInfoインターフェイスは、データメンバー、ベース メンバー及びファンクションメンバーに共通する特徴を定義する。テーブル4は IMemberInfoインターフェイスのリストである。 IMemberInfo::GetName 方法GetNameは、このIVarInfo又はIFuncInfoオブジ ェクトにより定義されたコンテナオブジェクトタイプのメンバーの名前を検索す る。この方法は、検索された名前をパラメータとして返送する。 IMemberInfo::GetHMember 方法GetHMemberは、このIVarInfo又はIFuncInfo オブジェクトにより定義されたコンテナオブジェクトタイプのメンバーに対する メンバーハンドルを形成する。 IMemberInfo::GetDllEntry 方法GetDllEntryは、メンバーがDLLエントリーを有するときに このIVarInfo又はIFuncInfoオブジェクトによって定義された コンテナオブジェクトタイプのメンバーに対しダイナミックリンクライブラリー (DLL)の名前及びDLLにおける順序を検索する。スタティックデータメン バー及びスタティックファンクションメンバーは、DLLエントリーを有する。 メンバーがDLLにおいて対応するエントリーを有していない場合に、この方法 は、DLLファイル名を空のストリングにセットする。この方法は、検索された DLLファイル名及び順序をパラメータとして返送する。 IMemberInfo::GetDocumentation 方法GetDocumentationは、このIVarInfo又はIFu ncInfoオブジェクトによって定義されたコンテナオブジェクトタイプのメ ンバーの記述を含むストリングを検索する。この方法は、検索されたストリング をパラメータとして返送する。 IMemberInfo::GetHelpContext 方法GetHelpContextは、このIVarInfo又はIFunc Infoオブジェクトにより定義されたコンテナオブジェクトタイプのメンバー に対するヘルプコンテクストを検索する。ヘルプコンテクストは、コンテナIT ypeInfoオブジェクトのヘルプファイルに対するインデックスである。ヘ ルプコンテクストは、メンバーの詳細な記述をアクセスするのに使用される。こ の方法は、検索されたヘルプコンテクストをパラメータとして返送する。 IMemberInfo::GetTypeInfoContainer 方法GetTypeInfoContainerは、このIVarInfo又 はIFuncInfoオブジェクトを含むITypeInfoオブジェクトを検 索する。この方法は、検索されたITypeInfoオブジェクトをパラメータ として返送する。 IMemberInfo::SetName 方法SetNameは、指定された名前を、このIVarInfo又はIFu ncInfoオブジェクトにより定義されたコンテナオブジェクトタイプのメン バーの名前として記憶する。 IMemberInfo::SetHmember 方法SetHmemberは、指定されたメンバーハンドルを、このIVar Info又はIFuncInfoオブジェクトにより定義されたコンテナオブジ ェクトタイプのメンバーのメンバーハンドルとして記憶する。 IMemberInfo::SetDllEntry 方法SetDllEntryは、指定のファイル名及び指定された順序をこの IVarInfo又はIFuncInfoオブジェクトにより定義されたコンテ ナオブジェクトタイプのメンバーに対するファイル名及び順序として記憶する。 IMemberInfo::SetDocumentation 方法SetDocumentationは、指定されたストリングを、このI VarInfo又はIFuncInfoオブジェクトにより定義されたコンテナ オブジェクトタイプのメンバーに対するドキュメンテーションとして記憶する。 IMemberInfo::SetHelpContext 方法SetHelpContextは、このIVarInfo又はIFunc Infoオブジェクトにより定義されたコンテナオブジェクトタイプのメンバー に対するヘルプコンテクストを記憶する。 テーブル5 Class IVarInfo:Public IMemberInfo{ virtual VARKIND GetVarKind()=0; virtual SCODE GetTypeDesc(ITypeDesc**lplptdesc)=0; virtual SCODE GetVal(VARIANT*lpvariant)=0; virtual BOOL IsStatic()=0; virtual BOOL GetOVar(LONG*lpvbpVar)=0; virtual SCODE SetTypeDesc(ITypeDesc*lptdesc)=0; virtual SCODE SetVal(VARIANT variant)=0; virtual SCODE SetStatic(BOOL fStatic)=0; }; IVarInfoインターフェイス IVarInfoインターフェイスは、IVarInfoオブジェクトの方法 を定義する。IVarInfoインターフェイスは、IMemberInfoイ ンターフェイスを継承し、そしてデータメンバー、ベースメンバー及び列挙子を 定義するメカニズムを与える。「変数カインド(variable kind)」という語は 、IVarInfoオブジェクトがベースメンバーを定義するか、データメンバ ーを定義するか又は列挙子を定義するかを指示する。「変数」という語は、デー タメンバー、ベースメンバー又は列挙子を指す。テーブル5は、IVarInf oインターフェイスによって導入される方法をリストしたものである。 IVarInfo::GetVarKind 方法GetVarKindは、このIVarInfoオブジェクトが定義する 変数カインドを検索する。 IVarInfo::GetTypeDesc 方法GetTypeDescは、このIVarInfoオブジェクトにより定 義された変数のオブジェクトタイプを定義するITypeDescオブジェクト を検索する。この方法は、検索されたITypeDescに対するポインタをパ ラメータとして返送する。 IVarInfo::GetVal 方法GetValは、このIVarInfoオブジェクトにより定義された変 数が一定のデータメンバー又は列挙子であるときに変数タイプを検索する。この 方法は、ポインタを引数として返送する。この方法は、変数が一定のデータメン バー又は列挙子でない場合にエラーを返送する。 IVarInfo::IsStatic 方法IsStaticは、このIVarInfoオブジェクトにより定義され た変数がスタティックであるかどうかを指示するフラグを検索する。この方法は 検索されたフラグをその値として返送する。コンテナオブジェクトタイプのタイ プカインドがMODULEである場合には、データメンバーが常にスタティック であるのが好ましい。 IVarInfo::GetOVar 方法GetOVarは、このIVarInfoオブジェクトにより定義された 変数に対しコンテナオブジェクトタイプのオブジェクトのインスタンスデータの 開始からオフセットを検索する。このオフセットは、ベースメンバー及び非一定 のデータメンバーにのみ適用できる。この方法は、オフセットをパラメータとし て返送する。 IVarInfo::SetTypeDesc 方法SetTypeDescは、このIVarInfoオブジェクトにより定 義された変数のタイプを記憶する。 IVarInfo::SetVal 方法SetValは、指定された変数を、このIVarInfoオブジェクト により定義された変数に対する一定値として記憶する。 IVarInfo::SetStatic 方法SetStaticは、指定されたフラグを、このIVarInfoオブ ジェクトにより定義された変数に対するスタティックフラグとして記憶する。 テーブル6 class ITypeDesc { virtual VARTYPE GetVarType()=0; virtual SCODE GetTypeDescBasis(ITypeDesc**lplptdesc)=0; virtual BOOL IsConst()=0; virtual BOOL IsVolatile()=0; virtual DWORD GetSize()=0; virtual SCODE GetFuncDesc(IFuncDesc**lplpfdesc)=0; virtual SCODE GetTypeInfo(ITypeInfo**lplptinfo)=0; virtual SCODE SetVarType(VARTYPE vt)=0; virtual SCODE SetTypeDescBasis(ITypeDesc*lptdesc)=0; virtual SCODE SetConst(BOOL fConst)=0; virtual SCODE SetVolatile(BOOL fVolatile)=0; virtual SCODE SetSize(DWORD cbSizeType)=0; virtual SCODE SetFuncDesc(IFuncDesc*lpfdesc)=0; }; ITypeDescインターフェイス ITypeDescインターフェイスは、ITypeDescオブジェクトの 方法を定義する。ITypeDescオブジェクトは変数のタイプを定義する。 好ましい実施例において、ITypeDescオブジェクトは、基本的なタイプ (例えば、一体的タイプ、浮動タイプ)及び導出されたタイプを定義する。テー ブル6は、ITypeDescインターフェイスをリストするものである。導出 されたタイプは、直接導出されたタイプ(例えば、変数又はオブジェクトのアレ ー、ファンクション、変数又はオブジェクトのポインタ、オブジェクトに対する 参照、定数、クラスメンバーに対するポインタ)、及び構成され導出されたタイ プ(例えば、クラス、構造、ユニオン)を含む。 ITypeDesc::GetVarType 方法GetVarTypeは、このITypeDescオブジェクトの変数タ イプを検索する。この方法は、検索された変数タイプをその値として返送する。 変数タイプは、この変数が特定の基本的タイプであるか、直接導出されたタイプ であるか、又は構成された導出タイプであるかを指示する。 ITypeDesc::GetTypeDescBasis 方法GetTypeDescBasisは、このITypeDescオブジェ クトにより定義された変数の導出されたタイプを定めるITypeDescオブ ジェクトを検索する。この方法は、検索されたITypeDescのポインタを パラメータとして返送する。 ITypeDesc::IsConst 方法IsConstは、このITypeDescオブジェクトにより定義され た変数が定数であるかどうかを指示するフラグを検索する。この方法は、検索さ れたフラグをその値として返送する。 ITypeDesc::IsVolatile 方法IsVolatileは、このITypeDescオブジェクトにより定 義された変数が揮発性であるかどうかを指示するフラグを検索する。この方法は 検索されたフラグをその値として返送する。 ITypeDesc::GetSize 方法GetSizeは、このITypeDescオブジェクトにより定義され た変数のサイズを検索する。この方法は、検索したサイズをその値として返送す る。 ITypeDesc::GetFuncDesc 方法GetFuncDescは、このITypeDescオブジェクトにより 定義された変数が指すファンクションの原型を定義するIFuncDescオブ ジェクトを検索する。この方法は、検索されたIFuncDescのポインタを パラメータとして返送する。この変数がファンクションのポインタでない場合に は、この方法はポインタをNULLにセットする。 ITypeDesc::GetTypeInfo 方法GetTypeInfoは、このITypeDescオブジェクトにより 定義された変数のオブジェクトタイプを定義するITypeInfoオブジェク トを検索する。この方法は、検索されたITypeDescオブジェクトに対す るポインタを返送する。該当しない場合には、この方法はこのポインタをNUL Lにセットする。 ITypeDesc::SetVarType 方法SetVarTypeは、このITypeDescオブジェクトにより定 義された変数の変数タイプを記憶する。 ITypeDesc::SetTypeDescBasis 方法SetTypeDescBasisは、このITypeDescオブジェ クトにより定義された変数の導出タイプを記述するために指定のITypeDe scオブジェクトを記憶する。 ITypeDesc::SetConst 方法SetConstは、このITypeDescオブジェクトに対して定義 された変数の定数フラグとして指定のフラグを記憶する。 ITypeDesc::SetVolatile 方法SetVolatileは、このITypeDescオブジェクトに対し て定義された変数の揮発性フラグとして指定のフラグを記憶する。 ITypeDesc::SetSize 方法SetSizeは、このITypeDescオブジェクトにより定義され た変数のサイズとして指定のサイズを記憶する。サイズは、固定長さのストリン グに対してのみ設定できる。サイズは他の全ての変数タイプから推定できる。 ITypeDesc::SetFuncDesc 方法SetFuncDescは、このITypeDescオブジェクトにより 定義された変数が指すファンクションの原型を定義するために指定のIFunc Descを記憶する。 テーブル7 class IFuncInfo:Public IMemberInfo { virtual SCODE GetFuncDesc(IFuncDesc**lplpfdesc)=0; virtual BOOL IsProperty()=0; virtual BOOL IsPure()=0; virtual UNIT GetOvft()=0; virtual FUNCKIND GetFuncKind()=0; virtual SCODE SetFuncDesc(IFuncDesc*lpfdesc)=0; virtual SCODE SetProperty(BOOL fProperty)=0; virtual SCODE SetPure(BOOL fPure)=0; virtual SCODE SetFuncKind(FUNCKIND fkindFunc)=0; }; IFuncInfoインターフェイス IFuncInfoインターフェイスは、IFuncInfoオブジェクトの 方法を定義する。IFuncInfoインターフェイスは、IMemberIn foインターフェイスを継承し、ファンクションの原型及びファンクションの結 合情報を定義する。テーブル7は、IFunctionInfoの原型をリスト したものである。 IFuncInfo::GetFuncDesc 方法GetFuncDescは、このIFuncInfoオブジェクトによっ て定義されたファンクションの原型情報を定めるIFuncDescオブジェク トのポインタを検索する。この方法は、検索されたIFuncDescのポイン タをパラメータとして返送する。 IFuncInfo::GetPropKind 方法GetPropKindは、このIFuncInfoオブジェクトにより 定義されたファンクションに対する特性カインドを検索する。この特性カインド は、このIFuncInfoが特性関数であるかどうか指示し、もしそうであれ ば、特性関数のタイプを指示する。特性関数とは、データメンバーがアクセスさ れるのと同じ方法で言語において構文的に呼び出されたファンクションである。 コンパイラーは、ファンクションメンバーの呼び出しへのデータメンバーアクセ スであると考えられるものをコンパイルする。特性関数は、特性がセットされた ときに動作を行えるようにする。例えば、パラグラフが位置合わせ特性を有する 場合に、位置合わせ特性が正しいとセットされたときに、データメンバーセット だけではなく、方法も呼び出されて、もし表示されればパラグラフを更新する。 特性ファンクションのタイプは、セットであるかゲットである。この方法は、特 性カインドをその値として返送する。 IFuncInfo::IsPure 方法IsPureは、このIFuncInfoオブジェクトにより定義された ファンクションが純粋な仮想ファンクションであるかどうかを指示するフラグを 検索する。この方法は、検索されたフラグをその値として返送する。 IFuncInfo::GetOvft 方法GetOvftは、このIFuncInfoオブジェクトにより定義され たファンクションのコンテナオブジェクトタイプの仮想ファンクションテーブル におけるオフセットを検索する。このファンクションが仮想ファンクションでな い場合には、指示子が返送される。オフセットはコンパイル中にセットされる。 この方法は、検索されたオフセットをその値として返送する。 IFuncInfo::GetFuncKind 方法GetFuncKindは、このIFuncInfoオブジェクトにより 定義されたファンクションのファンクションカインド(例えば、仮想、スタティ ック、等)を検索する。この方法は、検索されたファンクションカインドをその 値として返送する。 IFuncInfo::SetFuncDesc 方法SetFuncDescは、指定されたIFuncDescオブジェクト をこのIFuncInfoオブジェクトにより定義されたファンクションの原型 情報として記憶する。 IFuncInfo::SetPropKind 方法SetPropKindは、指定された特性カインドを、このIFunc Infoオブジェクトにより定義されたファンクションの特性カインドとして記 憶する。 IFuncInfo::SetPure 方法SetPureは、指定されたフラグを、このIFuncInfoオブジ ェクトにより定義されたファンクションの純粋なフラグとして記憶する。 IFuncInfo::SetFunkKind 方法SetFuncKindは、指定されたファンクションカインドを、この IFuncInfoオブジェクトにより定義されたファンクションのファンクシ ョンカインドとして記憶する。 テーブル8 interface IFuncDesc { virtual SCODE GetTypeDescResult(ITypeDesc**lplptdesc)=0; virtual UNIT GetParamCount()=0; virtual SCODE GetParam(UNIT index,IParamInfo**lplpparaminfo)=0; virtual CALLINGCONVENTION GetCallingConvention()=0; virtual SCODE GetTypeDescThis(ITypeDesc**lplptdescThis)=0; virtual BOOL HasAnyNumArgs()=0; virtual UNIT GetOptionalArgs()=0; virtual SCODE SetTypeDescResult(ITypeDesclptdesc)=0; virtual SCODE AddParam(UNIT index,IParaminfo**lpparaminfo)=0; virtual SCODE RemParam(UNIT index)=0; virtual SCODE SetCallingConvention(CALLINGCONVENTION ccFunc)=0; virtual SCODE SetTypeDescThis(ITypeDesc*lptdescThis)=0; virtual SCODE SetAnyNumArgs(BOOL hasAnyNumArgs)=0; virtual SCODE SetOptionaIArgs(UNIT cOptionalArgs)=0; }; IFuncDescインターフェィス IFuncDescインターフェイスは、IFuncInfoオブジェクトの 方法を定義する。IFuncDescインターフェイスは、ファンクション原型 定義をアクセスするメカニズムを与える。テーブル8は、IFuncDescイ ンターフェイスをリストする。 IFuncDesc::GetTypeDescResult 方法GetTypeDescResultは、このIFuncDescオブジ ェクトにより定義されたファンクションの返送タイプを定義するITypeDe scオブジェクトを検索する。この方法は、ITypeDescオブジェクトの ポインタをパラメータとして返送する。 IFuncDesc::GetParamCount 方法GetParamCountは、このIFuncDescオブジェクトに より定義されたファンクションの公式なパラメータの数を検索する。この方法は この数をその値として返送する。この数はこのファンクションにより必要とされ るパラメータの最小数を指示する。付加的なパラメータは、タイプ変数のもので ある。 IFuncDesc::GetParam 方法GetParamは、このIFuncDescオブジェクトにより定義さ れたファンクションの指定のインデックスの公式なパラメータを定義するIPa ramInfoオブジェクトを検索する。この方法は、IParamInfoオ ブジェクトのポインタをパラメータとして返送する。 IFuncDesc::GetCallingConvention 方法GetCallingConventionは、このIFuncDesc オブジェクトにより定義されたファンクションのコーリングコンベンション(例 えば、パスカル、C++)を検索する。この方法は、検索されたコーリングコン ベンションをその値として返送する。 IFuncDesc::GetTypeDescThis 方法GetTypeDescThisは、このIFuncDescオブジェク トにより定義されたファンクションのTHISポインタ(例えば、近、遠)のタ イプを定義するITypeDescオブジェクトを検索する。この方法は、IT ypeDescオブジェクトのポインタをパラメータとして返送する。このファ ンクションがスタティックである場合には、この方法はポインタをNULLにセ ットする。 IFuncDesc::HasAnyNumArgs 方法HasAnyNumArgsは、このIFuncDescオブジェクトに より定義されたファンクションがパラメータの変数をサポートするかどうかを示 すフラグを検索する。この方法は、検索されたフラグをその値として返送する。 IFuncDesc::GetOptionalArgs 方法GetOptionalArgsは、このIFuncDescオブジェク トにより定義されたファンクションがサポートするオプションのパラメータの数 を検索する。この方法は、検索された数をその値として返送する。 IFuncDesc::SetTypeDescResult 方法SetTypeDescResultは、指定されたITypeDesc オブジェクトを、このIFuncDescオブジェクトにより定義されたファン クションの返送タイプとして記憶する。 IFuncDesc::AddParam 方法AddParamは、このIFuncDescオブジェクトにより定義さ れたファンクションのパラメータの指定のインデックスの前に指定のIPara mInfoオブジェクトを追加する。ファンクションに対して現在定義されてい るパラメータの数に等しいインデックスを指定することにより新たなパラメータ を添付することができる。 IFuncDesc::RemParam RemParamは、このIFuncDescオブジェクトにより定義された ファンクションの公式パラメータリストから指定のインデックスの公式パラメー タを除去する。 IFuncDesc::SetCallingConvention 方法SetCallingConventionは、指定のコーリングコンベ ンションを、このIFuncDescオブジェクトにより定義されたファンクシ ョンのコーリングコンベンションとして記憶する。 IFuncDesc::SetTypeDescThis 方法SetTypeDescThisは、このIFuncDescオブジェク トにより定義されたファンクションのTHISポインタのタイプを定義するため に指定のITypeDescオブジェクトを記憶する。 IFuncDesc::SetAnyNumArgs 方法SetAnyNumArgsは、指定された数を、このIFuncDes cオブジェクトにより定義されたファンクションのオプションのパラメータの数 として記憶する。HasAnyNumArgsフラグが偽である場合には、この 方法はエラーを返送する。最後の公式パラメータが変数の配列でない場合には、 この方法はエラーを返送する。 IFuncDesc::SetOptionalArgs 方法SetOptionalArgsは、指定の数を後続のオプションパラメ ータの数として記憶する。最後の公式パラメータが変数でない場合は、この方法 はエラーを返送する。 テーブル9 class IParaminfo{ virtual SCODE GetParamName(LPBSTR lpbstrParamName)=0; virtual SCODE GetDocumentation(BSTR*lpbstrDoc)=0; virtual SCODE GetTypeDesc(ITypeDesc**lplptdesc=0; virtual SCODE SetParamName(LPSTR szName)=0; virtual SCODE SetDocumentation(LPSTR szDoc)=0; virtual SCODE SetTypeDesc(ITypeDesc*lptdesc)=0; }; IParamInfoインターフェイス IparamInfoインターフエイスは、IparamInfoオブジェク トの方法を定義する。IparamInfoオブジェクトは、公式なパラメータ を定義するメカニズムを与える。テーブル9は、IParamInfoインター フェイスをリストしたものである。 IParamInfo::GetParamName 方法GetParamNameは、このIParamInfoオブジェクトに より定義された公式パラメータの名前を検索する。この名前は、名前の付けられ たパラメータコール構文(例えば、ParamB=104)をサポートする言語 により使用される。この方法は、検索された名前をパラメータとして返送する。 IParamInfo::GetDocumentation 方法GetDocumentationは、このIParamInfoオブジ ェクトにより定義された公式パラメータの記述を含むストリングを検索する。検 索されたストリングは、パラメータとして返送される。 IParamInfo::GetTypeDesc 方法GetTypeDescは、このIParamInfoオブジェクトによ り定義された公式パラメータのタイプを定義するITypeDescオブジェク トを検索する。この方法は、検索されたITypeDescオブジェクトのポイ ンタをパラメータとして返送する。 IParamInfo::SetParamName 方法SetParamNameは、指定された名前を、このIParamIn foオブジェクトにより定義された公式パラメータの名前として記憶する。 IParamInfo::SetDocumentation 方法SetDocumentationは、指定されたストリングを、このI ParamInfoオブジェクトにより定義された公式パラメータのドキュメン テーションとして記憶する。 IParamInfo::SetTypeDesc 方法SetTypeDescは、このIParamInfoオブジェクトによ り定義された公式パラメータのタイプを定義するために指定のITypeDes cオブジェクトを記憶する。 テーブル10 interface ITypeBind { virtual SCODE GetTypeInfoContainer(ITypeInfo**lplptinfoContainer)=0; virtual UNIT GetCbSize()=0; virtual UNIT GetAligment()=0; virtual UNIT GetCbSizeVft()=0; Virtual SCODE Bind(HGNAM hgname,KIND*lpbkind,VOID**lplplIxxxinfo)=0; Virtual SCODE BindProperty(HGNAM hgname,IFuncInfo**lplpfinfoGet, IFuncInfo**lplpfinfoPut, IFuncInfo**lplpfinfoRefPut=0; Virtual SCODE BindType(HGNAM hgname,ITYPEBIND**lplpitypebind)=0; virtual BOOL CanCast(ITypeInfo*lptinfoBase)=0; Virtual SCODE GetOverridenFunction(IFuncinfo*lpfinfo,IFuncInfo** lplpfinfoOverriden)=0; }; ITypeBindインターフェイス ITypeBindインターフェイスは、ITypeBindオブジェクトの 方法を定義する。ITypeBindインターフェイスは、コンテナオブジェク トタイプを用いてコンパイルするに必要な情報をコンパイラーが検索するための メカニズムを与える。コンパイラーは、ITypeBindオブジェクトの方法 を呼び出し、コンテナオブジェクトタイプで定義されたタイプのオブジェクトの インスタンスへ結合する。好ましい実施例では、結合名(メンバー名及びタイプ 名)は、名前テーブルに対するハンドル(hgnam)として表される。このよ うに、結合名は、ストリングを用いるのではなく、ハンドルにより結合中に効率 的に識別できる。コンパイラーは、ITypeBindインターフェイスの方法 を呼び出す前に、各結合名を名前ハンドルに変換する。タイプライブラリーは、 この変換に対してグローバルなファンクションを供給する。テーブル10は、I TypeBindインターフェイスをリストしたものである。 ITypeBind::GetTypeInfoContainer 方法GetTypeInfoContainerは、このITypeBind オブジェクトのコンテナオブジェクトタイプを定義するITypeInfoオブ ジェクトを検索する。この方法は、検索されたITypeInfoオブジェクト のポインタをパラメータとして検索する。 ITypeBind::GetCbSize 方法GetCbSizeは、このITypeBindオブジェクトにより定義 されたオブジェクトタイプのオブジェクトのサイズを検索する。このサイズは、 インスタンスデータのサイズである。この方法は、検索されたサイズをその値と して返送する。 ITypeBind::GetAlignment 方法GetAlignmentは、このITypeBindオブジェクトのコ ンテナオブジェクトタイプの埋め込まれたオブジェクトに対するアライメントを 検索する。この方法は、アライメントをその値として返送する。 ITypeBind::GetCbSizeVft 方法GetCbSizeVftは、このITypeBindオブジェクトのコ ンテナオブジェクトタイプに対する仮想ファンクションテーブルのサイズを検索 する。この方法は、検索されたサイズをその値として返送する。 ITypeBind::Bind 方法Bindは、このITypeBindオブジェクトにより定義されたコン テナタイプ内の指定の名前ハンドルに合致するメンバーを定義するIVarIn fo又はIFuncInfoオブジェクトを検索する。この方法は、メンバーが 特性であるかどうかの指示子を返送する。メンバーが特性である場合には、方法 BindPropertyを次に呼び出さねばならない。この方法は、IVar Info又はIFuncInfoオブジェクトのポインタをパラメータとして返 送する。 ITypeBind::BindProperty 方法BindPropertyは、このITypeBindオブジェクトのコ ンテナオブジェクトタイプの指定の名前ハンドルに合致するメンバーの特性取得 (get property)ファンクション及び特性入力(put property)ファンクション を定義するIFuncInfoオブジェクトを検索する。この方法は、IFun cInfoオブジェクトに対するポインタを返送する。 ITypeBind::BindType 方法BindTypeは、指定のタイプ名に合致するタイプを定義するITy peBindオブジェクトを検索する。この方法は、方法ITypeLib:: GetTypeBindにより返送されたITypeBindオブジェクトに基 づいて呼び出され、そのライブラリー内に定義されたタイプに結合する。又、こ の方法は、ネストされたタイプに結合するのにも使用される。 ITypeBind::CanCast 方法CanCastは、このITypeBindオブジェクトのコンテナオブ ジェクトタイプのベースメンバーを定義するITypeInfoオブジェクトを 検索する。別の実施例においては、多数の継承を受け入れるために、IType Bindオブジェクトのアレーが検索される。この方法は、検索されたITyp eBindインスタンスに対するポインタを返送する。 ITypeBind::GetOverridenFunction 方法GetOverridenFunctionは、このITypeBind オブジェクトのコンテナオブジェクトタイプのファンクションメンバーを定義す る指定のIFuncInfoオブジェクトにより定められたファンクションと原 型が同一であるような仮想ファンクションメンバーを定義するIFuncInf oオブジェクトを検索する。この方法は、検索されたIFuncInfoオブジ ェクトに対するポインタをパラメータとして返送する。 テーブル11 class ITypeFixups { virtual SCODE GetTypeInfoContainer(ITypeInfo**lplptinfoContainer)=0; virtual UNIT AddressofMember(HMEMBER hmember,VOID**lplpvoid)=0; }; ITypeFixupsインターフェイス ITypeFixupsインターフェイスは、ITypeFixupsオブジ ェクトの方法を定義する。ITypeFixupsインターフェイスは、スタテ ィックファンクションメンバー、スタティックデータメンバー及びグローバルな ファンクション及びデータのアドレスをローダが検索するためのメカニズムを与 える。テーブル11は、ITypeFixupsインターフェイスをリストした ものである。 ITypeFixups::GetTypeInfoContainer 方法GetTypeInfoContainerは、このITypeFixu psオブジェクトのコンテナオブジェクトタイプを定義するITypeInfo オブジェクトを検索する。この方法は、検索されたITypeInfoオブジェ クトに対するポインタをパラメータとして返送する。 ITypeFixups::AddressOfMember 方法AddressOfMemberは、このITypeFixupsオブジ ェクトのコンテナオブジェクトタイプの指定のメンバーのアドレスを検索する。 指定のメンバーがスタティックファンクションメンバー又はグローバルなファン クションである場合には、この方法は、ダイナミックリンクライブラリーからフ ァンクションを具現化するコードをロードする。別の実施例では、タイプライブ ラリーが最初にオープンしたときに、全てのスタティックファンクションメンバ ー及びグローバルなファンクションをロードすることができる。又、ファンクシ ョンは、個別のダイナミックリンクライブラリーではなくてタイプライブラリー に直接記憶することができる。この方法は、アドレスをその値として返送する。 補助ファンクション 本発明は、種々の補助ファンクションを提供する。これら補助ファンクション は、アプリケーションがタイプライブラリーをオープンしそして種々のインター フェイスオブジェクトをインスタンス生成するためのメカニズムを与える。例え ば、ファンクションCreateITypeDescは、初期化されたITyp eDescオブジェクトを形成しそしてこのオブジェクトに対するポインタを返 送する。これらのファンクションは、ライブラリーをオープンするファンクショ ンを除いて、タイプライブラリー内のグローバルなファンクションとして定義す ることができる。 継続例 コードテーブル2ないし5は、タイプライブラリーへのクラス定義の追加を示 す擬似コードをリストしたものである。コードテーブル2は、ルーチンAddC lassの擬似コードをリストしたものである。このルーチンAddClass には、指定のクラス定義を追加すべきところのITypeLibオブジェクトに 対するポインタが通される。ライン2において、このルーチンは、指定のクラス 定義を通すルーチンGenerateClassTypeInfoを呼び出す。 このルーチンGenerateClassTypeInfoは、初期化されたI TypeInfoオブジェクトを指定のクラス定義と共に返送する。ライン3に おいて、このルーチンは、指定のITypeLibオブジェクトにITypeI nfoオブジェクトを追加する。 コードテーブル2 1 AddClass(definition,ptlib); 2 {GenerateClassTypeInfo(class_defini,ptinfo); 3 ptlib->AddTypeInfo(ptinfo); }; コードテーブル3は、ルーチンGenerateClassTypeInfo の擬似コードをリストしたものである。このルーチンGenerateClas sTypeInfoは、クラス定義(例えば、名前、メンバー名)が通され、そ のクラスを記述するに必要な全てのオブジェクトをインスタンス生成し、そして そのクラスを定義するITYpeInfoオブジェクトを返送する。ライン2に おいて、このルーチンは、初期化されていないITypeInfoオブジェクト をインスタンス生成するためにルーチンCreateTypeInfoを呼び出 す。ライン3、4及び5において、このルーチンは、クラスの種々の属性をセッ トする。ドキュメンテーション、ヘルプファイル等を含むクラスの他の属性をセ ットすることもできる。ライン6において、このルーチンは、初期化されていな いITypeMembersオブジェクトを検索するために方法GetType Membersを呼び出す。ライン7ないし10、11ないし14、15ないし 18において、このルーチンは、データメンバー、ファンクションメンバー及び ベースメンバーの定義をITypeMembersオブジェクトに追加する。デ ータメンバーの記述を追加するステップについては以下で説明する。当業者であ れば、ファンクションメンバーとベースメンバーを追加する説明は同様であるこ とが明らかであろう。ライン7ないし10において、このルーチンは、クラスの 全てのデータメンバーの定義をITypeMembersに追加する。ライン7 において、このルーチンは、データメンバーをインデックスするのに使用される 変数iを初期化する。ライン8ないし10において、このルーチンは、各データ メンバーの定義を追加するようにループする。ライン9において、このルーチン は、データメンバー定義及びITypeInfoオブジェクトを通すルーチンG enerateDataInfoを呼び出す。このルーチンGenerateD ataInfoは、データメンバーの定義を含むIVarInfoオブジェクト を返送する。ライン10において、このルーチンは、IVarInfoオブジェ クトをITypeMembersオブジェクトに追加する。 コードテーブル3 1 GenerateClassTypeInfo(class_definit,ptinfo) 2 {CreateTypeInfo(ptinfo); 3 ptinfo->setName(name); 4 ptinfo->SetTypeKind(CLASS); 5 ptinfo->SetAlignment(alignment); 6 ptinfo->GetTypeMembers(ptmembers); 7 i=0; 8 for(各データメンバー) 9 {GenerateDataInfo(datainfo,pvinfo); 10 ptmembers->AddVar(i++,pvinfo)}; 11 i=0; 12 for(各ファンクションメンバー) 13 {GenerateFuncInfo(funcinfo,pfinfo); 14 ptmembers->AddFunc(i++,pfinfo)}; 15 i=0; 16 for(各ベースクラス) 17 {GenerateBaseInfo(baseinfo,pvinfo); 18 ptmembers->AddBase(i++,pvinfo)}; } コードテーブル4は、ルーチンGenerateDataInfoに対する擬 似コードをリストしたものである。このルーチンGenerateDataIn foは、データメンバーを定義する情報が通され、データメンバーを定義するI VarInfoオブジェクトを発生し、そしてVarInfoオブジェクトを返 送する。ライン2において、このルーチンは、初期化されていないIVarIn foオブジェクトを形成するルーチンCreateVarInfoを呼び出す。 ライン5において、このルーチンは、IVarInfoインスタンスの名前をデ ータメンバーの名前にセットする。ライン6において、このルーチンは、指定の データメンバーに対するITypeDescインスタンスを形成しそして初期化 するためにルーチンGenerateTypeDescを呼び出す。ライン7に おいて、このルーチンは、ITypeDescインスタンスに対するポインタを IVarInfoインスタンスに記憶する。ライン8及び9において、このルー チンは、データメンバーの種々の属性をセットする。 コードテーブル4 1 GenerateDataInfo(varinfo,pvinfo) 2 {CreateVarInfo(pvinfo); 3 \*; 4 set variable kind to data member; 5 pvinfo->SetName(data member name); 6 GenerateTypeDesc(typedesc,ptdesc); 7 pvinfo->SetTypeDesc(ptdesc); 8 if(variable is static)pvinfo->SetStatic(true); 9 if(variable is constant)pvinfo->SetVal(constant value); } コードテーブル5は、ルーチンGenerateTypeDescに対する擬 似コードをリストしたものである。このルーチンGenerateTypeDe scは、タイプ定義及びITypeInfoオブジェクトが通され、IType Descオブジェクトを形成及び初期化し、そしてITypeDescオブジェ クトを返送する。ライン2において、このルーチンは、初期化されていないIT ypeDescオブジェクトを形成するためにルーチンCreateTypeD escを呼び出す。ライン3において、このルーチンは、ITypeInfoオ ブジェクトに対するポインタをセットする。ライン4において、このルーチンは ITypeDescオブジェクトの変数カインドをセットする。ライン4ないし 6において、変数が導出されたタイプである場合には、このルーチンは、ルーチ ンGenerateTypeDescを繰り返し呼び出すことによりその導出さ れたタイプに対するITypeDescオブジェクトを発生し、そしてその導出 されたタイプに対するITypeDescオブジェクトのポインタを記憶する。 ライン7ないし11において、このルーチンは、種々の属性をセットし、そして 変数がファンクションを指すときにIFuncDescインスタンスを形成し、 初期化する。 コードテーブル5 1 GenerateTypeDesc(typedesc,ptdesc); 2 {CreateTypeDesc(ptdesc); 3 ptdesc->SetVarType(variabletype); 4 if(type has base) 5 {GenerateTypeDesc(typedesc_of_basis,ptdesc_for_basis); 6 ptdesc->SetTypeDescBasis(ptdescforbasis)}; 7 if(type is constant)ptdesc->SetConst(true); 8 if(type is volatile)ptdesc->SetVolatile(true); 9 if(type is pointer to function) 10 {GenerateFuncDesc(functionname,pfdesc); 11 ptdesc->SetFuncDesc(pfdesc)}; } 図8は、マクロインタープリターがコードテーブル1のマクロを解読するため に実行するステップを示す図である。図8は、マクロインタープリターの流れ線 図を表すものでなく、コードテーブル1のマクロを解読するときにマクロインタ ープリターが実行するステップを表している。ステップ801において、マクロ インタープリターは、ワードプロセッサのタイプライブラリーをオープンする。 タイプライブラリーがオープンされると、ITypeLibオブジェクトに対す るポインタが変数ptlibにおいて返送される。ステップ802において、マ クロインタープリターは、ドキュメントタイプのポインタである変数pdocに 対しメモリを割り当てる。ステップ803では、マクロインタープリターは、パ ラグラフタイプのポインタである変数pparaに対しメモリを割り当てる。ス テップ804において、マクロインタープリターは、コードテーブル1のライン 3を解読する。マクロインタープリターは、そのルーチンExecuteGlo balFunctionを呼び出し、これに、オープンタイプライブラリーのポ インタ、グローバルファンクションGetDocの名前、及びパラメータがない という指示を通す。このルーチンは、ワードプロセッサにおけるオープンドキュ メントのドキュメントオブジェクトに対するポインタをその値として返送する。 ステップ850において、マクロインタープリターは、変数pdocを返送値に セットする。ステップ806において、マクロインタープリターは、コードテー ブル1のライン4を解読する。マクロインタープリターは、変数iを0にセット する。ステップ807ないし810において、マクロインタープリターは、コー ドテーブル1のライン5及び6を解読する。ステッブ807において、マクロイ ンタープリターは、ルーチンExecuteMemberFunctionを呼 び出し、オーブンライブラリーのITypeLibオブジェクトのポインタ、ド キュメントオブジェクトのポインタ、ポインタがドキュメントオブジェクトタイ プに対するものであるという指示、実行すべきファンクションメンバー(Get Para)の名前、及びパラメータの指示の数を通す。このルーチンは、Get Paraファンクションメンバーの結果を返送する。GetParaファンクシ ョンメンバーは、指定されたインデックスのパラグラフオブジェクトのポインタ を返送する。ステップ808において、マクロインタープリターは、変数ppa raを返送値に等しくセットする。ステップ809において、変数pparaが ナルに等しい場合には、全てのパラグラフが処理されており、マクロインタープ リターはコードテーブル1の解読を終了し、さもなくば、マクロインタープリタ ーはステップ810に続く。ステップ810では、マクロインタープリターは、 ルーチンExecuteFunctionMemberを呼び出し、オープンラ イブラリーのITypeLibオブジェクトのポインタ、パラグラフオブジェク トのポインタ、パラグラフオブジェクトのポインタがパラグラフを指していると いう指示、実行すべきパラグラフオブジェクトのファンクションメンバーの名前 (SetJustify)、及びパラメータ「right」を通す。ファンクシ ョンメンバーSetJustifyは、返送値をもたない。次いで、マクロイン タープリターは、ステップ807へループし、コードテーブル1のライン5及び 6のループの実行を続ける。 図9は、ルーチンExecuteGlobalFunctionの流れ線図で ある。このルーチンは、グローバルファンクションのアドルスを決定し、そのグ ローバルファンクションに対するパラメータをプッシュし、グローバルファンク ションを呼び出し、そしてグローバルファンクションの値を返送する。このルー チンには、ITypeLibのポインタ、実行すべきグローバルファンクション の名前、及びファンクションに対するパラメータが通される。このルーチンは、 グローバルファンクションの値を返送する。ステップ901において、このルー チンは、ルーチンGetAddressOfGlobalFunctionを呼 び出し、ITypeLibオブジェクトのポインタ、ファンクション名及びパラ メータをそこに通す。ルーチンGetAddressOfGlobalFunc tionは、ワードプロセッシングプログラム内の指定の名前のグローバルファ ンクションのアドレスを返送する。ステップ902において、このルーチンは、 パラメータをプッシュする。パラメータをプッシュするステップは、グローバル ファンクションのコールコンベンションに基づいている。ステップ903におい て、このルーチンは、グローバルファンクションを呼び出す。ステップ904に おいて、このルーチンは、グローバルファンクションの値を返送値として記憶し そしてそれ自体を返送する。 図10は、ルーチンGetAddressOfGlobalFunction の流れ線図である。このルーチンGetAddressOfGlobalFun ctionは、タイプライブラリーをアクセスして、指定のグローバルファンク ションのアドレスを決定する。このルーチンには、ITypeLibオブジェク トのポインタ、グローバルファンクションの名前、グローバルファンクションへ 通すためのパラメータが通される。このルーチンは、グローバルファンクション のアドレスを返送する。ステップ1001において、このルーチンは、ルーチン BindToGlobalFunctionを呼び出し、これにITypeLi bオブジェクトのポインタ及びグローバルファンクションの名前を通す。このル ーチンBindToGlobalFunctionは、指定のグローバルファン クションに対するITypeBindオブジェクトのポインタを返送する。ステ ップ1002において、このルーチンは、ルーチンGetFuncInfoを呼 び出し、これにITypeBindオブジェクトのポインタを通す。このルーチ ンGetFuncInfoは、グローバルファンクションに対するIFuncI nfoオブジェクトのポインタを返送する。ステップ1003において、このル ーチンは、ルーチンValidateParametersを呼び出し、これに パラメータ及びIFuncInfoオブジェクトのポインタを通す。このルーチ ンValidateParametersは、指定のパラメータがIFuncI nfoオブジェクトにおいて特定された公式パラメータに一致するかどうかを決 定する。ステップ1004において、このルーチンは、ルーチンGetAddr essを呼び出し、これにIFuncInfoオブジェクトのポインタを通す。 このルーチンGetAddressは、IFuncInfoオブジェクトに対応 するアドレスを返送する。ルーチンGetAddressOfGlobalFu nctionは、次いで、復帰する。 コードテーブル6は、ルーチンBindToGlobalFunctionの 擬似コードをリストしたものである。このルーチンBindToGlobalF unctionは、ITypeLibオブジェクトのポインタ及びグローバルフ ァンクションの名前を入力する。このルーチンは、指定されたファンクションに 対するITypeBindオブジェクトを検索し、そしてそのオブジェクトに対 するポインタを返送する。このルーチンは、MODULEのタイプカインドを有 するタイプライブラリー内の各ITypeInfoオブジェクトを通してサーチ することによりITypeBindオブジェクトを検索する。このルーチンは、 ITypeInfoオブジェクト内の各ファンクションをチェックして、それが 指定の名前に一致するかどうかを決定する。指定の名前に一致する場合には、次 いで、このルーチンは、そのファンクションに対するITypeBindオブジ ェクトを検索し、復帰となる。別の実施例では、方法ITypeLib::Ge tTypeBind()を用いて、ITypeBindインスタンスを検索し、 これにより、指定の名前のグローバルファンクションに対するITypeBin dオブジェクトを検索することができる。又、別の実施例においては、ルーチン BindToGlobalFunctionは、最初のグローバルファンクショ ンが見つかったときに復帰するのではなく、指定の名前をもつ多数のグローバル ファンクションが定義されたかどう判断するようにチェックする。 コードテーブル6 1 BindToGlobalFunction(ptlib,fname,pbind) 2 {count=ptlib->GetTypeInfoCount(); 3 for(i=0;i<count;i++) 4 {ptlib->GetTypeInfo(i,ptinfo); 5 if ptinfo->GetTypeKind()==MODULE 6 {ptinfo->GetTypeMembers(ptmembers); 7 fcount=ptmembers->GetFuncCount(); 8 for(j:0;j<fcount;j++) 9 {ptmembers->GetFunc(j,pfinfo); 10 pfinfo->GetName(name); 11 if fname=name 12 {ptinfo->GetTypeBind(&ptbind); 13 return}}}}}; } コードテーブル7は、ルーチンGetFuncInfoに対する擬似コードを リストしたものである。このルーチンGetFuncInfoには、IType Bindオブジェクトのポインタ及び結合すべきファンクションの名前が通され る。このルーチンは、指定のファンクションに対しIFuncInfoオブジェ クトのポインタを返送する。 コードテーブル7 1 GetFuncInfo(ptbind,fname,pfinfo); 2 {ptbind->Bind(fname,BINDKIND_FUNCTION,pfinfo); } コードテーブル8は、ルーチンValidateParametersの擬似 コードをリストするものである。このルーチンは、パラメータのリスト及びIF uncInfoオブジェクトのポインタを受け取る。このルーチンは、指定のパ ラメータがIFuncInfoインスタンスの公式パラメータに一致するかどう か決定する。このルーチンは、パラメータが一致するかどうかの指示をその値と して返送する。 コードテーブル8 1 ValidateParameters(parameters,pfinfo) 2 {pfinfo->GetFuncDesc(pfdesc); 3 for(i=0;i<pfdesc->GetParamCount();i++) 4 {pfdesc->GetParam(i,&ppinfo); 5 ppinfo->GetTypeDesc(ptdesc); 6 Determine if Parameters[i] matches type pointed to by ptdesc 7 if (!match) {return error}}; } コードテーブル9は、ルーチンGetAddressの擬似コードをリストし たものである。このルーチンは、IFuncInfoオブジェクトのポインタを 受け取り、そしてそのオブジェクトにより定義されたファンクションのアドレス を返送する。このルーチンは、そのメンバーのハンドルを検索し、ITypeF ixupsオブジェクトを使用して、アドレスを検索する。 コードテーブル9 1 GetAddress(pfinfo,address) 2 {Hmember=pfinfo->GetHmember(); 3 pfinfo->GetTypeInfoContainer(ptinfo); 4 pfinfo->GetTypeFixups(ptfixups); 5 address=ptfixups->AddressOfMember(Hmember); } 図11は、ルーチンExecuteFunctionMemberの流れ線図 である。このルーチンには、ITypeLibオブジェクトのポインタと、オブ ジェクトのポインタと、オブジェクトのタイプと、ファンクションメンバーの名 前と、ファンクションメンバーへ通すためのパラメータとが通される。このルー チンは、指定のオブジェクトの仮想ファンクションテーブル内のファンクション メンバーのオフセットを決定し、そのファンクションを呼び出してそこにパラメ ータを通し、そして指定のファンクションの値を返送する。ステップ1101に おいて、このルーチンは、ルーチンGetOffsetOfFunctionM emberを呼び出して、そこに、ITypeLibオブジェクトのポインタ、 指定のファンクションの名前、指定のファンクションがメンバーであるところの オブジェクトのタイプ、及び指定のファンクションに対するパラメータを通す。 ルーチンGetOffsetOfFunctionMemberは、指定のオブ ジェクトタイプの仮想ファンクションテーブル内の指定のファンクションメンバ ーのオフセットを返送する。ステップ1103において、このルーチンはパラメ ータをプッシュする。ステップ1104において、このルーチンは指定のオブジ ェクトの指定のファンクションを呼び出す。ステップ1105において、このル ーチンは指定のファンクションの返送値を記憶する。ルーチンExecuteF unctionMemberは、次いで、復帰となる。 図12は、ルーチンGetOffsetOfFunctionMemberの 流れ線図である。このルーチンは、ITypeLibオブジェクトのポインタ、 ファンクションメンバーの名前、ファンクションメンバーのコンテナオブジェク トタイプ、及びファンクションメンバーに通されるパラメータを入力する。この ルーチンは、パラメータを有効化し、そしてコンテナオブジェクトタイプの仮想 ファンクションテーブルにおける指定のファンクションメンバーのオフセットを 返送する。ステップ1201において、このルーチンは、ルーチンBindTo FunctionMemberを呼び出し、これに、指定のITypeLibオ ブジェクトのポインタと、指定のコンテナオブジェクトタイプとを通す。このル ーチンは、指定のコンテナオブジェクトタイプに対するITypeBindオブ ジェクトのポインタを返送する。ステップ1202において、このルーチンは、 ルーチンGetFuncInfoを呼び出し、これに、指定のITypeInf oオブジェクトのポインタと、指定のファンクションメンバーの名前とを通す。 このルーチンは、指定のファンクションに対するIFuncInfoオブジェク トのポインタを返送する。ステップ1203において、このルーチンは、ルーチ ンValidateParametersを呼び出し、これに、指定のパラメー タと、指定のファンクションメンバーに対するIFuncInfoオブジェクト のポインタとを通す。ステップ1205において、このルーチンは、ルーチンG etOffsetを呼び出し、これに、指定のファンクションメンバーに対する IFuncInfoオブジェクトのポインタを通す。このルーチンGetOff setは、コンテナオブジェクトタイプの仮想ファンクションテーブル内の指定 のファンクションメンバーのオフセットを返送する。このルーチンGetOff setは、次いで、復帰する。 コードテーブル10は、ルーチンBindToFunctionMember の擬似コードをリストしたものである。このルーチンBindToFuncti onMemberには、ITypeLibオブジェクトのポインタと、コンテナ オブジェクトタイプの名前とが通される。このルーチンは、指定のコンテナオブ ジェクトタイプに対するITypeBindオブジェクトに対するポインタを返 送する。 コードテーブル10 1 BindToFunctionMember(ptlib,type,ptbind) 2 {ptlib->GetIndexOfName(type,index); 3 ptlib->GetTypeInfo(index,ptinfo); 4 ptinf->GetTypeBind(ptbind); } コードテーブル11は、ルーチンGetOffsetの擬似コードをリストし たものである。このルーチンGetOffsetは、IFuncInfoオブジ ェクトが通され、そして指定のIFuncInfoオブジェクトにより定義され たファンクションメンバーのオフセットを返送する。 コードテーブル11 1 GetOffset(pfinfo,offset) 2 {offset=pfinfo->GetOvft(); } この実施例に述べたタイブライブラリーインターフェイスは、せいぜい1つの ベースクラスで定義されたクラスをサポートすることが当業者に理解されよう。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 カロン イーラン ジー アメリカ合衆国 ワシントン州 98052 レッドモンド ワンハンドレッドアンドフ ォーティセカンド アベニュー ノースイ ースト 8411 (72)発明者 カーター アレン ダブリュー アメリカ合衆国 ワシントン州 98008 ベルヴィュー サウスイースト ファース ト ストリート 15940 (72)発明者 コーベット トム アメリカ合衆国 オレゴン州 97401 ユ ージーン オークモント ウェイ 2085 (72)発明者 ウルフ マイケル ジェイ アメリカ合衆国 ワシントン州 98290 スノーホーミッシュ トゥーハンドレッド アンドフィフティーンス プレイス サウ スイースト 12126

Claims (1)

  1. 【特許請求の範囲】 1.タイプライブラリーデータ構造体を含むメモリを有したコンピュータシス テムにおいて、上記タイプライブラリーデータ構造体は、複数のクラスタイプを 定義する情報を有し、各クラスタイプはメンバーを有し、上記メモリは、 タイプ情報オブジェクトに対する参照を有すると共に、タイプ情報オブジェク トをアクセスするためのタイプライブラリーオブジェクトファンクションメンバ ーを有するタイプライブラリーオブジェクトと、 各々のクラスタイプごとに、タイプメンバーオブジェクトに対する参照を有す ると共に、タイプ情報オブジェクトにより参照されたタイプメンバーオブジェク トをアクセスするためのタイプ情報オブジェクトファンクションメンバーを有す るタイプ情報オブジェクトとを備え、タイプメンバーオブジェクトは、クラスタ イプのメンバーを定義する情報を含むと共に、クラスタイプのメンバーを定義す る情報をアクセスするためのタイプメンバーオブジェクトファンクションメンバ ーを有することを特徴とするコンピュータシステム。 2.各タイプ情報オブジェクトは、タイプ結合オブジェクトに対する参照を有 し、タイプ結合オブジェクトは、クラスタイプのオブジェクトへ結合するのに用 いるための情報を有すると共に、タイプ結合オブジェクトの結合情報をアクセス するためのタイプ結合オブジェクトファンクションメンバーを有する請求項1に 記載のコンピュータシステム。 3.結合情報は、データメンバー名と、クラスタイプのオブジェクト内のデー タメンバーのオフセットとを含む請求項2に記載のコンピュータシステム。 4.結合情報は、ファンクションメンバー名と、クラスタイプのオブジェクト の仮想ファンクションテーブル内のファンクションメンバーのオフセットとを含 む請求項2に記載のコンピュータシステム。 5.結合情報は、クラスタイプのベースクラスの識別を含む請求項2に記載の コンピュータシステム。 6.各タイプ情報オブジェクトは、タイプフィックスアップオブジェクトに対 する参照を含み、タイプフィックスアップオブジェクトは、クラスタイプのオブ ジェクトをロードするのに使用する情報を有すると共に、タイプフィックスアッ プオブジェクトのロード情報をアクセスするためのタイプフィックスアップオブ ジェクトファンクションメンバーを有する請求項1に記載のコンピュータシステ ム。 7.ロード情報は、メンバー名と、ロードされるときの対応するアドレスとを 含む請求項6に記載のコンピュータシステム。 8.各タイプメンバーオブジェクトは、クラスタイプの各データメンバーの変 数情報オブジェクトに対する参照を含み、この変数情報オブジェクトは、データ メンバーを定義する情報を含むと共に、変数情報オブジェクトの情報をアクセス するための変数情報オブジェクトファンクションメンバーを有する請求項1に記 載のコンピュータシステム。 9.データメンバーを定義する情報は、データメンバーの名前と、クラスタイ プのオブジェクト内のデータメンバーのオフセットとを含む請求項8に記載のコ ンピュータシステム。 10.各タイプメンバーオブジェクトは、クラスタイプの各ファンクションメ ンバーのファンクション情報オブジェクトに対する参照を含み、ファンクション 情報オブジェクトは、ファンクションメンバーを定義する情報を有すると共に、 ファンクション情報オブジェクトの情報をアクセスするためのファンクション情 報オブジェクトファンクションメンバーを有する請求項1又は8に記載のコンピ ュータシステム。 11.ファンクションメンバーを定義する情報は、ファンクションメンバーの 名前と、クラスタイプのオブジェクトの仮想ファンクションテーブル内のファン クションメンバーのオフセットとを含む請求項10に記載のコンピュータシステ ム。 12.ファンクションメンバーを定義する情報は、更に、ファンクションメン バーの各公式パラメータごとに、公式パラメータのタイプを定義する情報と、公 式パラメータのタイプを定義する情報をアクセスするためのパラメータ情報オブ ジェクトファンクションメンバーとを有するパラメータ情報オブジェクトを備え ている請求項11に記載のコンピュータシステム。 13.ファンクションメンバーを定義する情報は、更に、ファンクションメン バーの返送タイブを定義する情報と、ファンクションメンバーの返送タイプを定 義する情報をアクセスするためのタイプ記述オブジェクトファンクションメンバ ーとを有するタイプ記述オブジェクトを備えている請求項11に記載のコンピュ ータシステム。 14.ファンクションメンバーを定義する情報は、更に、ファンクションメン バーに対する「この」ポインタを定義する情報と、「この」ポインタのタイプを 定義する情報をアクセスするためのタイプ記述オブジェクトファンクションメン バーとを有するタイプ記述オブジェクトを備えている請求項11に記載のコンピ ュータシステム。 15.ベースクラスを定義する情報は、ベースクラスの名前と、クラスタイプ のオブジェクト内のベースクラスのオフセットとを含む請求項10に記載のコン ピュータシステム。 16.各タイプメンバーオブジェクトは、クラスタイプの各ベースクラスごと にタイプ情報オブジェクトに対する参照を含み、タイプ情報オブジェクトは、ベ ースクラスを定義する情報と、タイプ情報オブジェクトの情報をアクセスするた めのタイプ情報ファンクションメンバーとを有する請求項1、8又は10に記載 のコンピュータシステム。 17.タイプライブラリーを形成するためのコンピュータシステムにおける方 法であって、タイプライブラリーは、複数のタイプに対するタイプ定義情報を有 し、上記方法は、 複数のタイプに対してタイプ定義情報を受け取り、 タイプライブラリーインターフェイスの具現体をコンピュータシステムのメモ リにロードし、タイプライブラリーインターフェイスは、受け取ったタイプ定義 情報を、プログラミング言語的にに独立した形態でタイプライブラリーに記憶す るためのファンクションを有し、そして 各受け取ったタイプ定義情報ごとに、タイプライブラリーインターフェイスの ファンクションを呼び出して、タイプ定義情報を記憶する、 という段階を備えたことを特徴とする方法。 18.タイプに対する変数情報オブジェクトをインスタンス生成する段階を備 え、変数タイプ情報オブジェクトは、そのインスタンス生成された変数情報オブ ジェクトに情報定義情報を記憶するためのファンクションメンバーを有する請求 項17に記載の方法。 19.タイプライブラリーから情報を検索するためのコンピュータシステムに おける方法であって、タイプライブラリーは、複数のクラスタイプを定義する情 報を含み、上記方法は、 クラスタイプを受け取り、 その受け取ったクラスタイプを定義する情報を、タイプライブラリーから検索 し、そして その検索された情報に基づいてクラスタイプのオブジェクトをインスタンス生 成する、 というコンピュータ具現化段階を備えたことを特徴とする方法。 20.上記の受け取り、検索及びインスタンス生成の段階は、単一のコンピュ ータプログラムで行われる請求項19に記載の方法。 21.サーバプログラムによりインスタンス生成されたオブジェクトであって タイプを有するオブジェクトをアクセスするためのクライエントプログラムのた めのコンピュータシステムにおいて、このコンピュータシステムはタイプライブ ラリーを有し、このタイプライブラリーはオブジェクトのタイプを定義する情報 を含んでおり、上記コンピュータシステムは、 上記サーバプログラム内にあってオブジェクトをインスタンス生成するための 手段と、 上記クライエントプログラム内にあって、インスタンス生成されたオブジェク トのタイプを定義する情報をタイプライブラリーから検索し、サーバプログラム のファンクションを呼び出して、上記インスタンス生成されたオブジェクトのア ドレスを検索し、そして上記検索された情報及び検索されたアドレスを用いて上 記インスタンス生成されたオブジェクトのファンクションメンバーを呼び出すた めの手段とを備えたことを特徴とするコンピュータシステム。 22.クライエントプログラムをサーバプログラムのアドレススペースにロー ドするための手段を備えた請求項21に記載のコンピュータシステム。 23.クライエントプログラムを、サーバプログラムのアドレススペースとは 個別のアドレススペースにロードするための手段を備えた請求項21に記載のコ ンピュータシステム。 24.クライエントブログラム内にあって、コンピュータシステムのユーザか ら、インスタンス生成されたオブジェクトのタイプの指示と、呼び出すべきファ ンクションメンバーの指示とを受け取るための手段を備えた請求項21に記載の コンピュータシステム。 25.タイプを有するオブジェクトをアクセスするためのコンピュータシステ ムであって、複数のタイプを定義する情報をもつタイプライブラリーを有してい るコンピュータシステムにおいて、 インスタンス生成されるべきオブジェクトのタイプの指示を受け取るための手 段と、 呼び出すべきオブジェクトのファンクションメンバーの指示を受け取るための 手段と、 指示されたタイプを定義する情報を検索するための手段と、 検索された情報に基づいて指示されたタイプのオブジェクトをインスタンス生 成するための手段と、 インスタンス生成されたオブジェクトの指示されたファンクションメンバーを 呼び出すための手段とを備えたことを特徴とするコンピュータシステム。 26.上記の受け取り、検索し、インスタンス生成しそして呼び出す手段は、 単一のコンピュータプログラムの一部分である請求項25に記載のコンピュータ システム。 27.サーバによってインスタンス生成されたオブジェクトであってクラスタ イプを有しているオブジェクトをクライエントに露呈するためのコンピュータシ ステムにおける方法であって、 クラスタイプを定義する情報を有するタイプライブラリーを発生し、 サーバの制御のもとで、オブジェクトをインスタンス生成し、 クライエントの制御のもとで、クラスタイプを定義する情報をタイプライブラ リーから検索し、そしてインスタンス生成されたオブジェクトをアクセスするよ うにサーバに要求し、そして サーバの制御のもとで、クライエントによる要求に応答して、上記インスタン ス生成されたオブジェクトを必要に応じてアクセスする、 という段階を備えたことを特徴とする方法。 28.クラスタイプはファンクションメンバーを含み、上記アクセス段階は、 ファンクションメンバーを呼び出すことを含む請求項27に記載の方法。 29.クライエント及びサーバは、別々のプロセスとして実行する請求項27 に記載の方法。 30.クライエント及びサーバは、同じアドレススペースにおいて実行する請 求項27に記載の方法。 31.クライエントコンピュータプログラムによりオブジェクトをアクセスす るコンピュータシステムにおける方法であって、オブジェクトはオブジェクトタ イプを有し、そしてサーバコンピュータプログラムによってインスタンス生成さ れ、上記方法は、 オブジェクトタイプの定義と、インスタンス生成されたオブジェクトに対する ポインタを返送するファンクションとを含むタイプライブラリーを発生し、 サーバコンピュータプログラムを実行し、サーバコンピュータプログラムはオ ブジェクトタイプのオブジェクトをインスタンス生成し、そして クライエントコンピュータプログラムを実行し、クライエントコンピュータプ ログラムは、上記発生されたタイプライブラリーを用いて上記インスタンス生成 されたオブジェクトのオブジェクトタイプの定義を決定し、上記発生されたタイ プライブラリーを用いて上記インスタンス生成されたオブジェクトの位置を検索 するように呼び出すべきファンクションの位置を決定し、そして上記決定された 定義及び位置を用いてオブジェクトをアクセスする、 という段階を備えたことを特徴とする方法。 32.ファンクションの位置を決定する上記段階は、コンピュータシステムに ファンクションをロードする段階を備えた請求項31に記載の方法。 33.所望のタイプのオブジェクトをインスタンス生成するためのコンピュー タシステムにおける方法であって、 第1コンピュータプログラムの実行中に、所望のタイプの定義を受け取りそし てその受け取った定義をタイプライブラリーに記憶し、そして 第2コンピュータプログラムの実行中に、タイプライブラリーから所望のタイ プの定義を検索しそしてその検索された定義に基づいてオブジェクトをインスタ ンス生成する、 という段階を備えたことを特徴とする方法。
JP6510177A 1992-10-09 1993-10-08 タイプライブラリーへインターフェイスする方法及びシステム Pending JPH08502136A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US07/959,056 US6209040B1 (en) 1992-10-09 1992-10-09 Method and system for interfacing to a type library
US07/959,056 1992-10-09
PCT/US1993/009673 WO1994009428A1 (en) 1992-10-09 1993-10-08 Method and system for interfacing to a type library

Publications (1)

Publication Number Publication Date
JPH08502136A true JPH08502136A (ja) 1996-03-05

Family

ID=25501621

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6510177A Pending JPH08502136A (ja) 1992-10-09 1993-10-08 タイプライブラリーへインターフェイスする方法及びシステム

Country Status (4)

Country Link
US (1) US6209040B1 (ja)
EP (1) EP0746815A4 (ja)
JP (1) JPH08502136A (ja)
WO (1) WO1994009428A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10254709A (ja) * 1997-03-05 1998-09-25 Internatl Business Mach Corp <Ibm> メモリ・アドレスに索引付けする方法

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870550A (en) * 1996-02-26 1999-02-09 Network Engineering Software Web server employing multi-homed, moldular framework
US8117298B1 (en) 1996-02-26 2012-02-14 Graphon Corporation Multi-homed web server
US6173327B1 (en) 1996-07-11 2001-01-09 Jeroen De Borst Object-oriented method and apparatus for information delivery
US6263485B1 (en) * 1996-07-11 2001-07-17 Andrew Schofield Method and apparatus for describing an interface definition language-defined interface, operation, and data type
US6718534B1 (en) * 1997-07-14 2004-04-06 Microsoft Corporation System for application independent programming of controls
US6848108B1 (en) * 1998-06-30 2005-01-25 Microsoft Corporation Method and apparatus for creating, sending, and using self-descriptive objects as messages over a message queuing network
US6381736B1 (en) * 1999-10-12 2002-04-30 Cisco Technology, Inc. Method for compile-time type-checking of arguments for externally-specified format strings
US7120899B1 (en) * 1999-10-21 2006-10-10 Unisys Corporation Method for implementing component object model interfaces
US20030014555A1 (en) * 2001-06-29 2003-01-16 Michal Cierniak System and method for efficient dispatch of interface calls
US6941550B1 (en) 2001-07-09 2005-09-06 Microsoft Corporation Interface invoke mechanism
US20050049814A1 (en) * 2003-08-26 2005-03-03 Ramchandani Mahesh A. Binding a GUI element to a control in a test executive application
US8032504B2 (en) * 2003-08-28 2011-10-04 Oracle America, Inc. Mechanism for enabling new task types to be added to a system for managing distributed nodes
US7480646B2 (en) * 2003-10-23 2009-01-20 Microsoft Corporation Type path indexing
US7730462B2 (en) * 2004-01-27 2010-06-01 Microsoft Corporation Generalized comprehension in imperative languages
US7752596B2 (en) * 2006-03-17 2010-07-06 Microsoft Corporation Connecting alternative development environment to interpretive runtime engine
US8321853B2 (en) * 2007-05-11 2012-11-27 Microsoft Corporation Type and property definition support for software
US20080307446A1 (en) * 2007-06-08 2008-12-11 Microsoft Corporation Interoperable Managed and Unmanaged Code in a Document Environment
US20100146014A1 (en) * 2008-12-04 2010-06-10 Microsoft Corporation Extendable business type system in a performance management platform
US8694978B1 (en) * 2011-03-25 2014-04-08 Google Inc. Function side-effect modeling by prototyping
FR3087026A1 (fr) * 2018-10-04 2020-04-10 Movida Production Procede pour generer une liaison (binding) entre une bibliotheque c/c++ et un langage interprete, et mise en œuvre de ce procede pour la transformation d’un modele tridimensionnel (3d)

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5206951A (en) * 1987-08-21 1993-04-27 Wang Laboratories, Inc. Integration of data between typed objects by mutual, direct invocation between object managers corresponding to object types
ATE141423T1 (de) * 1988-09-20 1996-08-15 Digital Equipment Corp Anordnung zur teilung eines generischen kodes für ein digitales datenverarbeitungssystem
US5146593A (en) 1989-03-06 1992-09-08 International Business Machines Corporation Procedure call interface
US5093914A (en) 1989-12-15 1992-03-03 At&T Bell Laboratories Method of controlling the execution of object-oriented programs
US5280610A (en) * 1990-08-14 1994-01-18 Digital Equipment Corporation Methods and apparatus for implementing data bases to provide object-oriented invocation of applications
AU628753B2 (en) 1990-08-14 1992-09-17 Digital Equipment Corporation Method and apparatus for implementing server functions in a distributed heterogeneous environment
AU628264B2 (en) * 1990-08-14 1992-09-10 Oracle International Corporation Methods and apparatus for providing a client interface to an object-oriented invocation of an application
US5235701A (en) * 1990-08-28 1993-08-10 Teknekron Communications Systems, Inc. Method of generating and accessing a database independent of its structure and syntax
US5307499A (en) * 1990-11-30 1994-04-26 Singapore Computer Systems Limited Interpretive object-oriented facility which can access pre-compiled classes
JPH05257664A (ja) 1991-12-12 1993-10-08 Internatl Business Mach Corp <Ibm> バージョン独立のオブジェクト指向アプリケーション・プログラムを生成するシステム及び方法
US5421016A (en) * 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation
US5361350A (en) * 1991-12-12 1994-11-01 International Business Machines Corporation Object oriented method management system and software for managing class method names in a computer system
CA2077273C (en) * 1991-12-12 1996-12-03 Mike H. Conner Language neutral objects
US5339430A (en) * 1992-07-01 1994-08-16 Telefonaktiebolaget L M Ericsson System for dynamic run-time binding of software modules in a computer system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10254709A (ja) * 1997-03-05 1998-09-25 Internatl Business Mach Corp <Ibm> メモリ・アドレスに索引付けする方法

Also Published As

Publication number Publication date
WO1994009428A1 (en) 1994-04-28
US6209040B1 (en) 2001-03-27
EP0746815A4 (en) 1997-06-18
EP0746815A1 (en) 1996-12-11

Similar Documents

Publication Publication Date Title
JPH08502136A (ja) タイプライブラリーへインターフェイスする方法及びシステム
CN111966424B (zh) 使用复常量的方法和系统
US5515536A (en) Method and system for invoking methods of an object through a dispatching interface
US5761510A (en) Method for error identification in a program interface
US6025836A (en) Method and apparatus for generating object oriented user interfaces
US5325533A (en) Engineering system for modeling computer programs
US6675230B1 (en) Method, system, and program for embedding a user interface object in another user interface object
US5787431A (en) Database development system with methods for java-string reference lookups of column names
US20040036719A1 (en) Quicker development of database applications having a graphical user interface
JPH0836494A (ja) 動的拡張可能オブジェクト用のタイプ・セーフ・フレームワークのための方法及び装置
CA2144875A1 (en) Incremental linker system
US8601447B2 (en) Open controls
US12014190B2 (en) Type-constrained operations for plug-in types
US7499956B1 (en) Annotation processing from source files and class files
Albahari et al. C# Essentials: Programming the. NET Framework
US6769001B2 (en) System and method supporting nonlocal values
US7373639B2 (en) System and method supporting type checking of options
US7340720B2 (en) System and method supporting mapping of option bindings
Laurence et al. Programming Android with Kotlin
Harrison et al. Subdivided procedures: A language extension supporting extensible programming
Wielemaker SWI-Prolog 2.9. 6
Flatscher The augsburg version of BSF4Rexx
Friesen et al. Focusing on Odds and Ends
Java et al. R/Cpp: Interface classes to simplify using R objects in C++ extensions
WO2001035214A2 (en) System and method supporting plural option data structures