(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-22
(54)【発明の名称】ソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法及び相互呼び出しシステム
(51)【国際特許分類】
G06F 8/61 20180101AFI20240115BHJP
【FI】
G06F8/61
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023540782
(86)(22)【出願日】2022-08-10
(85)【翻訳文提出日】2023-07-03
(86)【国際出願番号】 CN2022111298
(87)【国際公開番号】W WO2023051039
(87)【国際公開日】2023-04-06
(31)【優先権主張番号】202111147972.X
(32)【優先日】2021-09-29
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】522308967
【氏名又は名称】シャンハイ トサン テクノロジー リミテッド
【氏名又は名称原語表記】Shanghai TOSUN Technology Ltd.
【住所又は居所原語表記】Room904,No.4801 Caoan RD.,Jiading District, Shanghai,201804 P.R.China
(74)【代理人】
【識別番号】110001841
【氏名又は名称】弁理士法人ATEN
(72)【発明者】
【氏名】リィゥ チュ
(72)【発明者】
【氏名】シェ ユェイン
(72)【発明者】
【氏名】ムォ マン
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AA09
5B376AA21
5B376AD17
5B376AD21
(57)【要約】
本発明は、ソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法及び相互呼び出しシステムである。ソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法は下記を含む。複数の第三者ライブラリを構築すること、第三者ライブラリの合法性を検証すること、及び複数の第三者ライブラリが相互に呼び出しを行うことにより、ソフトウェアプラットフォームを介して一つの汎用の呼び出しフレームを実現し、第三者ライブラリがソフトウェアプラットフォームに登録された関数は全てのロードされた第三者ライブラリの間に共有することができる。現在第三者ライブラリは他の第三者ライブラリを呼び出す必要がある場合、他の第三者ライブラリをロードする必要がなく、ソフトウェアプラットフォームが他の第三者ライブラリを含んだ、現在の第三者ライブラリに共有する関数表を使用すれば、他の第三者ライブラリへのアクセスを実現することができる。他の第三者ライブラリがロードされない場合、ソフトウェアプラットフォーム及び現在の第三者ライブラリはいずれもこの状況を知ることができ、これにより現在の第三者ライブラリを円滑にロードし且つ一部の機能を提供する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法であって、
複数の第三者ライブラリを構築することと、
前記第三者ライブラリの合法性を検証することと、
前記複数の第三者ライブラリは相互呼び出しを行うことと、を含むこと、
を特徴とするソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法。
【請求項2】
前記複数の第三者ライブラリを構築する方法は、
ソフトウェアプラットフォームによって各前記第三者ライブラリを構築し、すなわち前記ソフトウェアプラットフォームによって各前記第三者ライブラリにおける初期化サブモジュール、能力取得サブモジュール及び内部サブモジュールを構築し、且つ前記第三者ライブラリにおいて解放サブモジュールを構築することと、
前記解放サブモジュールは、前記第三者ライブラリがアンロードされる時にその申請したリソースを自動的に解放することに適することを、含むこと、
を特徴とする請求項1に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法。
【請求項3】
前記ソフトウェアプラットフォームにより前記初期化サブモジュールを構築する方法は、
前記ソフトウェアプラットフォーム内の前記ソフトウェアプラットフォームのヘッダファイル及びソフトウェアプラットフォームAPIリストによって前記初期化サブモジュールを生成し、前記初期化サブモジュールの呼び出しが完了した後、前記第三者ライブラリは前記ソフトウェアプラットフォームが提供するAPIリストにおける各APIのアドレス情報を取得することを、含むこと、
を特徴とする請求項2に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法。
【請求項4】
前記ソフトウェアプラットフォームにより能力取得サブモジュールを構築する方法は、
前記ソフトウェアプラットフォームは、前記ソフトウェアプラットフォームのバージョン番号をロードし、対応するユーザー論理コールバックサブモジュールのリストをロードし、且つ対応する前記第三者ライブラリが依存する外部サブモジュールのリストをロードして前記能力取得サブモジュールを生成しており、外部プログラムは前記能力取得サブモジュールを呼び出す時に、当該第三者ライブラリに対応する前記ソフトウェアプラットフォームのバージョン情報を取得し、前記ユーザー論理コールバックサブモジュールのリスト情報を取得し、この前記第三者ライブラリが依存する前記外部サブモジュール情報及びこの前記第三者ライブラリの全ての内部サブモジュール情報を取得することを、含むこと、
を特徴とする請求項3に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法。
【請求項5】
前記ソフトウェアプラットフォームにより内部サブモジュールを構築する方法は、
前記ソフトウェアプラットフォームのユーザー機能論理サブモジュールに基づいて前記内部サブモジュールを生成すること、を含むこと、
を特徴とする請求項4に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法。
【請求項6】
前記第三者ライブラリの合法性を検証する方法は、
前記第三者ライブラリを前記ソフトウェアプラットフォームにロードし、前記ソフトウェアプラットフォームは前記第三者ライブラリの前記初期化サブモジュールを呼び出し、前記ソフトウェアプラットフォームは前記第三者ライブラリの前記能力取得サブモジュールを呼び出し、前記第三者ライブラリに対応する前記ソフトウェアプラットフォームのバージョン番号を取得し、ユーザーコールバックサブモジュールのリストを取得し、前記第三者ライブラリの全ての前記内部サブモジュールのアドレス情報及び関数パラメータ情報を取得し、且つ当該第三者ライブラリが依存する前記外部サブモジュール情報を取得し、
前記ソフトウェアプラットフォームは前記第三者ライブラリにそれが依存するサブモジュールのポインタを提供し、
前記第三者ライブラリが依存する前記外部サブモジュールが存在しない場合、前記ソフトウェアプラットフォームは当該第三者ライブラリにヌルポインタを提供し、
前記第三者ライブラリは呼び出しプロセスにおいて、ヌルポインタであるか否かに基づいて当該第三者ライブラリが依存する他の前記第三者ライブラリが存在するか否かを判断し、
ヌルポインタであれば当該第三者ライブラリが依存する他の前記第三者ライブラリの前記内部サブモジュールは有効ではないが、当該第三者ライブラリにおける他の前記内部サブモジュールの機能は依然として有効であり、
前記ソフトウェアプラットフォームは取得した前記第三者ライブラリに対応する前記ソフトウェアプラットフォームのバージョン番号を自身のバージョン番号と比較し、前記第三者ライブラリのバージョン番号が自身のバージョン番号より大きいと当該第三者ライブラリの呼び出しを停止し、そうでなければ当該第三者ライブラリを呼び出し続けること、を含むこと、
を特徴とする請求項5に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法。
【請求項7】
前記複数の第三者ライブラリの相互呼び出し方法は、
前記ソフトウェアプラットフォームが前記第三者ライブラリを呼び出し続けた後、前記第三者ライブラリから取得した前記ユーザーコールバックサブモジュールのリスト及び前記内部サブモジュールのリストに基づいて前記第三者ライブラリを呼び出すことに適することと、
現在の前記第三者ライブラリが動作中に他の前記第三者ライブラリの前記内部サブモジュールを呼び出す必要があれば、前記ソフトウェアプラットフォームを介して前記能力取得サブモジュールにおいて現在の前記第三者ライブラリが依存するサブモジュールポインタを現在の前記第三者ライブラリに伝達することにより、現在の前記第三者ライブラリに他の前記第三者ライブラリにおける前記内部サブモジュールを呼び出させることと、
呼び出しが完了した後に、前記ソフトウェアプラットフォームは前記第三者ライブラリにおける前記解放サブモジュールを呼び出すことにより申請されたリソースを解放することを、含むこと、
を特徴とする請求項6に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法。
【請求項8】
前記ソフトウェアプラットフォームのヘッダファイル、前記ソフトウェアプラットフォームAPIリスト、前記ソフトウェアプラットフォームバージョン番号、前記ユーザー論理コールバックサブモジュールのリスト、前記第三者ライブラリが依存する前記外部サブモジュールリスト、前記ユーザー機能論理サブモジュールを含むこと、
を特徴とする請求項1~7のいずれか一項に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法用のソフトウェアプラットフォーム。
【請求項9】
前記初期化サブモジュール、前記能力取得サブモジュール、前記内部サブモジュール及び前記解放サブモジュールを含むこと、
を特徴とする請求項1~7のいずれか一項に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法用第三者ライブラリ。
【請求項10】
構築モジュールを含み、前記複数の第三者ライブラリを構築し、
検証モジュールを含み、前記第三者ライブラリの合法性を検証し、
呼び出しモジュールを含み、前記複数の第三者ライブラリは相互呼び出しを行うこと、
を特徴とする請求項1~7のいずれか一項に記載のソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法を用いる相互呼び出しシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はコンピュータ技術分野に属し、具体的にはソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法及び相互呼び出しシステムに関する。
【背景技術】
【0002】
Windowsに基づくソフトウェアプラットフォームは第三者ライブラリを導入する方式によって機能拡張を行う。ソフトウェアプラットフォームに導入された第三者ライブラリに一つの第三者ライブラリが他の第三者ライブラリを呼び出す状況が存在する。従来のやり方はその現在の第三者ライブラリを修正し、暗黙的又は明示的に他の第三者ライブラリを追加する方法によって他の第三者ライブラリへの呼び出しを実現する。
【0003】
従来の技術的解決手段による問題は、現在の第三者ライブラリを修正する方法により他の第三者ライブラリの呼び出しをサポートし、現在の第三者ライブラリの作業量を追加する必要がある。他の第三者ライブラリの変更に伴い、現在の第三者ライブラリも同期して変更される。現在第三者ライブラリは明示的に他の第三者ライブラリをロードする方法で他の第三者ライブラリを呼び出す場合、他の第三者ライブラリが存在しなければ現在の第三者ライブラリもロードできない。
【0004】
したがって、上記技術的問題に基づいて新たなソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法及び相互呼び出しシステムを設計する必要がある。
【発明の概要】
【0005】
本発明の目的はソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法及び相互呼び出しシステムを提供することである。
【0006】
上記技術的問題を解決するために、本発明はソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法を提供し、以下を含む:
複数の第三者ライブラリを構築する、
上記第三者ライブラリの合法性を検証する、及び、
上記複数の第三者ライブラリは相互呼び出しを行う。
【0007】
さらに、上記複数の第三者ライブラリを構築する方法は以下を含む:
ソフトウェアプラットフォームによって各上記第三者ライブラリを構築し、すなわち上記ソフトウェアプラットフォームによって各上記第三者ライブラリにおける初期化サブモジュール、能力取得サブモジュール及び内部サブモジュールを構築し、そして上記第三者ライブラリにおいて解放サブモジュールを構築する。
上記解放サブモジュールは、上記第三者ライブラリがアンロードされる時にその申請したリソースを自動的に解放することに適する。
【0008】
さらに、上記ソフトウェアプラットフォームにより上記初期化サブモジュールを構築する方法は以下を含む:
上記ソフトウェアプラットフォーム内の上記ソフトウェアプラットフォームのヘッダファイル及びソフトウェアプラットフォームAPIリストによって上記初期化サブモジュールを生成し、上記初期化サブモジュールの呼び出しが完了した後、上記第三者ライブラリは上記ソフトウェアプラットフォームが提供するAPIリストにおける各APIのアドレス情報を取得する。
【0009】
さらに、上記ソフトウェアプラットフォームにより能力取得サブモジュールを構築する方法は以下を含む:
上記ソフトウェアプラットフォームは、上記ソフトウェアプラットフォームのバージョン番号をロードし、対応するユーザー論理コールバックサブモジュールのリストをロードし、且つ対応する上記第三者ライブラリが依存する外部サブモジュールのリストをロードして上記能力取得サブモジュールを生成する。外部プログラムは上記能力取得サブモジュールを呼び出す時に、当該第三者ライブラリに対応する上記ソフトウェアプラットフォームのバージョン情報を取得し、上記ユーザー論理コールバックサブモジュールのリスト情報を取得し、この上記第三者ライブラリが依存する上記外部サブモジュール情報及びこの第三者ライブラリの全ての内部サブモジュール情報を取得する。
【0010】
さらに、上記ソフトウェアプラットフォームにより内部サブモジュールを構築する方法は以下を含む:
上記ソフトウェアプラットフォームのユーザー機能論理サブモジュールに基づいて上記内部サブモジュールを生成する。
【0011】
さらに、上記第三者ライブラリの合法性を検証する方法は以下を含む:
上記第三者ライブラリを上記ソフトウェアプラットフォームにロードする。上記ソフトウェアプラットフォームは上記第三者ライブラリの上記初期化サブモジュールを呼び出す。上記ソフトウェアプラットフォームは上記第三者ライブラリの上記能力取得サブモジュールを呼び出し、上記第三者ライブラリに対応する上記ソフトウェアプラットフォームのバージョン番号を取得し、ユーザーコールバックサブモジュールのリストを取得し、上記第三者ライブラリの全ての上記内部サブモジュールのアドレス情報及び関数パラメータ情報並びに当該第三者ライブラリが依存する上記外部サブモジュール情報を取得する。上記ソフトウェアプラットフォームは上記第三者ライブラリにそれが依存するサブモジュールのポインタを提供する。
上記第三者ライブラリが依存する上記外部サブモジュールが存在しない場合、上記ソフトウェアプラットフォームは当該第三者ライブラリにヌルポインタを提供する。
上記第三者ライブラリは呼び出しプロセスにおいて、ヌルポインタであるか否かに基づいて当該第三者ライブラリが依存する他の上記第三者ライブラリが存在するか否かを判断する。
ヌルポインタであれば当該第三者ライブラリが依存する他の上記第三者ライブラリの上記内部サブモジュールは有効ではないが、当該第三者ライブラリにおける他の上記内部サブモジュールの機能は依然として有効である。
上記ソフトウェアプラットフォームは取得した上記第三者ライブラリに対応する上記ソフトウェアプラットフォームのバージョン番号を自身のバージョン番号と比較し、上記第三者ライブラリのバージョン番号が自身のバージョン番号より大きいと当該第三者ライブラリの呼び出しを停止し、そうでなければ当該第三者ライブラリを呼び出し続ける。
【0012】
さらに、上記複数の第三者ライブラリの相互呼び出し方法は以下を含む:
上記ソフトウェアプラットフォームは上記第三者ライブラリを呼び出し続けた後、上記第三者ライブラリから取得した上記ユーザーコールバックサブモジュールのリスト及び上記内部サブモジュールのリストに基づいて上記第三者ライブラリを呼び出すことに適する。
現在の上記第三者ライブラリが動作中に他の上記第三者ライブラリの上記内部サブモジュールを呼び出す必要があれば、上記ソフトウェアプラットフォームを介して上記能力取得サブモジュールにおいて現在の上記第三者ライブラリが依存するサブモジュールポインタを現在の上記第三者ライブラリに伝達することにより、現在の上記第三者ライブラリに他の上記第三者ライブラリにおける上記内部サブモジュールを呼び出させる。
呼び出しが完了した後に、上記ソフトウェアプラットフォームは上記第三者ライブラリにおける上記解放サブモジュールを呼び出すことにより申請されたリソースを解放する。
【0013】
第二態様では、本発明はさらに、上記ソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法用のソフトウェアプラットフォームを提供し、以下を含む:
上記ソフトウェアプラットフォームのヘッダファイル、上記ソフトウェアプラットフォームAPIリスト、上記ソフトウェアプラットフォームバージョン番号、上記ユーザー論理コールバックサブモジュールのリスト、第三者ライブラリが依存する上記外部サブモジュールリスト、上記ユーザー機能論理サブモジュール及びC++コンパイラ。
【0014】
第三態様では、本発明はさらに上記ソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法用第三者ライブラリを提供し、以下を含む:
上記初期化サブモジュール、上記能力取得サブモジュール、上記内部サブモジュール及び上記解放サブモジュール。
【0015】
第四態様では、本発明はさらに上記ソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法を用いる相互呼び出しシステムを提供し、以下を含む:
構築モジュールであって、上記複数の第三者ライブラリを構築する、
検証モジュールであって、上記第三者ライブラリの合法性を検証する、及び、
呼び出しモジュール、上記複数の第三者ライブラリは相互呼び出しを行う。
【0016】
本発明の効果は以下の通りである。本発明は、複数の第三者ライブラリを構築すること、第三者ライブラリの合法性を検証すること、及び複数の第三者ライブラリが相互に呼び出しを行うことにより、ソフトウェアプラットフォームを介して一つの汎用の呼び出しフレームを実現し、第三者ライブラリがソフトウェアプラットフォームに登録された関数は全てのロードされた第三者ライブラリの間に共有することができる。このように現在第三者ライブラリは他の第三者ライブラリを呼び出す必要がある場合、他の第三者ライブラリをロードする必要がなく、ソフトウェアプラットフォームが他の第三者ライブラリを含んだ、現在の第三者ライブラリに共有する関数表を使用すれば、他の第三者ライブラリへのアクセスを実現することができる。他の第三者ライブラリがロードされない場合、ソフトウェアプラットフォーム及び現在の第三者ライブラリはいずれもこの状況を知ることができ、これにより現在の第三者ライブラリを円滑にロードし且つ一部の機能を提供する。
【0017】
本発明の他の特徴及び利点は以下の明細書に記載され、且つ、一部は明細書から明らかになり、又は本発明を実施することによって理解される。本発明の目的及び他の利点は明細書及び図面に特に指摘された構造によって実現及び取得される。
【0018】
本発明の上記目的、特徴及び利点をより分かりやすくするために、以下は好適な実施例を挙げ、且つ添付図面と合わせ、詳細に説明する。
【図面の簡単な説明】
【0019】
本発明の具体的な実施形態又は従来技術における技術的解決策をより明確に説明するために、以下では、具体的な実施形態又は先行技術の説明において使用する必要がある図面について簡単に説明するが、以下の説明における図面は本発明のいくつかの実施形態であり、当業者にとって創造的な労力を払うことなく、これらの図面から他の図面を得ることができることは明白である。
【
図1】
図1は、本発明に係るソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法のフローチャートである。
【
図2】
図2は、本発明に係る複数の第三者ライブラリを構築するフローチャートである。
【
図3】
図3は、本発明に係る複数の第三者ライブラリが相互呼び出しを行うフローチャートである。
【
図4】
図4は、本発明が設計する相互呼び出しシステムの原理ブロック図である。
【発明を実施するための形態】
【0020】
本発明の実施例の目的、技術的解決手段及び利点をより明確にするために、以下は図面を参照しながら本発明の技術的解決手段を明瞭、完全に説明し、明らかに、説明された実施例は本発明の一部の実施例であり、全ての実施例ではない。本発明における実施例に基づき、当業者は創造的な労働をしない前提で得られた全ての他の実施例は、いずれも本発明の保護範囲に属する。
【0021】
実施例1
図1は、本発明に係るソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法のフローチャートである。
図1に示すように、本実施例1はソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法を提供し、以下を含む:複数の第三者ライブラリを構築すること、第三者ライブラリの合法性を検証すること、及び複数の第三者ライブラリが相互に呼び出しを行うことにより、ソフトウェアプラットフォームを介して一つの汎用の呼び出しフレームを実現し、第三者ライブラリがソフトウェアプラットフォームに登録された関数は全てのロードされた第三者ライブラリの間に共有することができる。このように現在の第三者ライブラリは他の第三者ライブラリを呼び出す必要がある場合、他の第三者ライブラリをロードする必要がなく、ソフトウェアプラットフォームが他の第三者ライブラリを含んだ、現在の第三者ライブラリに共有する関数表を使用すれば、他の第三者ライブラリへのアクセスを実現することができる。他の第三者ライブラリがロードされない場合、ソフトウェアプラットフォーム及び現在の第三者ライブラリはいずれもこの状況を知ることができ、これにより現在の第三者ライブラリを円滑にロードし且つ一部の機能を提供する。
【0022】
図2は、本発明に係る複数の第三者ライブラリを構築するフローチャートである。
図2に示すように、本実施例において、上記複数の第三者ライブラリを構築する方法は以下のとおりである:ソフトウェアプラットフォームによりC++コンパイラを呼び出して第三者ライブラリを構築する。ソフトウェアプラットフォームによって各第三者ライブラリを構築し、すなわちソフトウェアプラットフォームによって各第三者ライブラリにおける初期化サブモジュール(初期化関数および対応する機能を含む)、能力取得サブモジュール(能力取得関数および対応する機能を含む)及び内部サブモジュール(内部関数及び対応する機能を含む)を構築し、且つ第三者ライブラリにおいて解放サブモジュール(解放関数及び対応する機能を含む)を構築する。上記解放サブモジュールは、第三者ライブラリがアンロードされる時にその申請したリソースを自動的に解放することに適する。初期化サブモジュール、能力取得サブモジュール及び解放サブモジュールは、開示されたサブモジュールであり、外部プログラムによってサブモジュールにおける関数を自動的にロードして呼び出すことができる。内部サブモジュールにおける関数は外部から見えない。
【0023】
本実施例において、上記ソフトウェアプラットフォームにより初期化サブモジュールを構築する方法は以下を含む:ソフトウェアプラットフォーム内のソフトウェアプラットフォームのヘッダファイル及びソフトウェアプラットフォームAPIリストによって初期化サブモジュールを生成し、初期化サブモジュールの呼び出しが完了した後、第三者ライブラリはソフトウェアプラットフォームが提供するAPIリストにおける各APIのアドレス情報を取得する。これにより、正常な機能を発揮することができる。
【0024】
本実施例において、上記ソフトウェアプラットフォームにより能力取得サブモジュールを構築する方法は以下を含む:ソフトウェアプラットフォームは、ソフトウェアプラットフォームのバージョン番号をロードし、対応するユーザー論理コールバックサブモジュールのリストをロードし、且つ対応する第三者ライブラリが依存する外部サブモジュールのリストをロードして能力取得サブモジュールを自動生成する。外部プログラムは能力取得サブモジュールを呼び出す時に、当該第三者ライブラリに対応するソフトウェアプラットフォームのバージョン情報を取得し、ユーザー論理コールバックサブモジュールのリスト情報を取得し、この第三者ライブラリが依存する外部サブモジュール情報及びこの第三者ライブラリの全ての内部サブモジュール情報を取得する。
本実施例において、上記ソフトウェアプラットフォームにより内部サブモジュールを構築する方法は以下を含む:ソフトウェアプラットフォームのユーザー機能論理サブモジュールに基づいて内部サブモジュールを生成し、内部サブモジュールは外部にインタフェースを開放せず、外部プログラム(第三者ライブラリ)から能力取得関数を呼び出すだけで取得することができる。
【0025】
図3は、本発明に係る複数の第三者ライブラリが相互呼び出しを行うフローチャートである。
図3に示すとおり、本実施例において、上記第三者ライブラリの合法性を検証する方法は以下を含む:第三者ライブラリの呼び出しプロセスはソフトウェアプラットフォームと第三者ライブラリが連携して完了する。動的リンクライブラリをロードすることにより、ソフトウェアプラットフォームは第三者ライブラリを自身のソフトウェアプラットフォームにロードする。ソフトウェアプラットフォームは第三者ライブラリの初期化サブモジュールを呼び出す。ソフトウェアプラットフォームは第三者ライブラリの能力取得サブモジュールを呼び出し、第三者ライブラリに対応するソフトウェアプラットフォームのバージョン番号を取得し、ユーザーコールバックサブモジュールのリストを取得し、第三者ライブラリの全ての内部サブモジュールのアドレス情報及び関数パラメータ情報並びに当該第三者ライブラリが依存する外部サブモジュール情報を取得する。能力取得関数呼び出しプロセスにおいて、ソフトウェアプラットフォームは同時に第三者ライブラリにそれが依存するサブモジュールのポインタを提供する(第三者ライブラリが依存する、他の第三者ライブラリにおける内部関数の関数ポインタを提供する)。第三者ライブラリが依存する外部サブモジュールが存在しない場合、ソフトウェアプラットフォームは当該第三者ライブラリにヌルポインタを提供する。第三者ライブラリは呼び出しプロセスにおいて、ヌルポインタであるか否かに基づいて当該第三者ライブラリが依存する他の第三者ライブラリが存在するか否かを判断する。ヌルポインタであれば当該第三者ライブラリが依存する他の第三者ライブラリの内部サブモジュールは有効ではないが、当該第三者ライブラリにおける他の内部サブモジュールの機能は依然として有効である。ソフトウェアプラットフォームは取得した第三者ライブラリに対応するソフトウェアプラットフォームのバージョン番号を自身のバージョン番号と比較し、第三者ライブラリのバージョン番号が自身のバージョン番号より大きいと当該第三者ライブラリの呼び出しを停止し、そうでなければ当該第三者ライブラリの合法性(要求に合致する)を判断して第三者ライブラリを呼び出し続ける。
【0026】
本実施例において、上記複数の第三者ライブラリの相互呼び出し方法は以下を含む:ソフトウェアプラットフォームは第三者ライブラリを呼び出し続けた後、ソフトウェアプラットフォームは、第三者ライブラリから取得したユーザーコールバックサブモジュールのリスト及び内部サブモジュールのリストに基づいて第三者ライブラリを呼び出すことに適する。現在第三者ライブラリは動作中に他の第三者ライブラリの内部サブモジュールを呼び出す必要があれば、ソフトウェアプラットフォームを介して能力取得サブモジュールにおいて現在第三者ライブラリが依存するサブモジュールポインタを現在第三者ライブラリに伝達することにより、現在第三者ライブラリに他の第三者ライブラリにおける内部サブモジュールを呼び出させる。呼び出しが完了した後に、ソフトウェアプラットフォームは第三者ライブラリにおける解放サブモジュールを呼び出すことにより申請されたリソースを解放する。ソフトウェアプラットフォームが第三者ライブラリを呼び出す時、第三者ライブラリの全ての依存する他の第三者ライブラリの内部関数を知ることができるだけでなく、さらにソフトウェアプラットフォーム自体によって第三者ライブラリにそれらの依存する関数ポインタを提供することができる。これにより第三者ライブラリの間に相互依存状況が存在する場合、ソフトウェアプラットフォームにより依存を提供することができ、第三者ライブラリを手動で修正する必要がない。且つソフトウェアプラットフォームによって第三者ライブラリに各種の関数依存を提供し、この方法は、他の第三者ライブラリへの依存を実現するために第三者ライブラリを頻繁に修正することを回避でき、第三者ライブラリの開発効率を向上させ、エラーの可能性を低下させる。
【0027】
本実施例において、ソフトウェアプラットフォームにより第三者ライブラリA及び第三者ライブラリBを構築する。ソフトウェアプラットフォームは第三者ライブラリAを呼び出す時、第三者ライブラリAは第三者ライブラリBの一部の内部関数に依存する必要がある。ソフトウェアプラットフォームは第三者ライブラリAにその依存する内部関数の関数ポインタを送信し、第三者ライブラリBから対応する内部関数を呼び出す。
【0028】
本実施例において、ソフトウェアプラットフォームは、ソフトウェアプラットフォームのヘッダファイル、APIシンボル情報を含むソフトウェアプラットフォームAPIリスト、ソフトウェアプラットフォームのバージョン番号、ユーザーがソフトウェアプラットフォームによって生成したユーザー論理(コールバック関数の方式で表現する)、ユーザーがソフトウェアプラットフォームによって設計した独自論理(通常関数で表現する)、及びユーザー論理が依存する他の第三者ライブラリ関数リスト(関数に関連するシンボル情報で表現する)を含む。ソフトウェアプラットフォームが相互に呼び出し可能な第三者ライブラリを構築する過程において、まず第三者ライブラリの初期化関数を生成する必要があり、当該関数のソースコードはソフトウェアプラットフォームのヘッダファイル及びAPIシンボル情報を含むソフトウェアプラットフォームAPIリストに基づいて生成される。次に能力取得関数を生成する必要があり、当該関数のソースコードはソフトウェアプラットフォーム自体のバージョン番号、ユーザー論理コールバック関数のシンボル情報及びユーザー論理依存の第三者ライブラリ関数のシンボル情報で構成される。また解放関数を生成する必要があり、第三者ライブラリのアンロード前に申請されたリソースを解放することを担当する。最後に一連の内部関数を生成する必要があり、これらの内部関数はユーザーがソフトウェアプラットフォームによって設計した独自論理である。必要な関数が生成された後、ソフトウェアプラットフォームはC/C++コンパイラを呼び出し、生成された関数を第三者ライブラリの実行可能なファイルにコンパイルする。
【0029】
本実施例において、ソフトウェアプラットフォームはさらに、動的リンクライブラリのロード機能、関数呼び出し機能、依存関数管理機能、及びバージョン番号の比較機能と実行機能と停止機能を含む。
ソフトウェアプラットフォームは相互に呼び出し可能な第三者ライブラリを呼び出す過程において、まず動的リンクライブラリのロード機能によって第三者ライブラリをロードする必要がある。ロードが成功した後、関数呼び出し機能によって第三者ライブラリの初期化関数を呼び出す。続いて関数呼び出し機能によって第三者ライブラリの能力取得関数を呼び出し、当該能力取得関数にコンパイルされたソフトウェアプラットフォームのバージョン番号、ユーザー論理コールバック関数及びユーザー論理が依存する第三者関数のシンボル情報を読み出し、且つソフトウェアプラットフォームに入力する。ソフトウェアプラットフォームは当該第三者ライブラリの構築バージョン番号と本ソフトウェアプラットフォームのバージョン番号との関係を知り、バージョン番号が同じであるか、又は本ソフトウェアプラットフォームのバージョン番号が第三者ライブラリの構築バージョン番号より大きい場合、本ソフトウェアプラットフォームは続けて第三者ライブラリを呼び出すことができ、そうでなければ呼び出しプロセスを終了する。同時にソフトウェアプラットフォームの依存関数管理機能はさらに当該第三者ライブラリの依存関数がソフトウェアプラットフォームに存在するか否かを検出する必要があり、存在すれば依存関数の先頭アドレスを第三者ライブラリに与える必要があり、存在しなければヌルポインタを第三者ライブラリに与える必要がある。バージョン番号比較機能と依存関数管理機能の実行が完了して継続的に呼び出し可能なフラグを返した後、ソフトウェアプラットフォームは実行プログラム機能を実行し、実行中に、第三者ライブラリの内部関数はソフトウェアプラットフォームに自由に呼び出され、ソフトウェアプラットフォームに各種の機能を提供する。第三者ライブラリはその依存する関数を呼び出す必要がある場合、まず依存する関数がヌルポインタであるか否かを判断し、ヌルポインタでなければ呼び出し続け、そうでなければその依存するライブラリが存在しないと考えられ、関連機能が失効し、現在呼び出しプロセスは失敗に戻る。第三者ライブラリを使用する必要がない場合、ソフトウェアプラットフォームはプログラム停止機能を実行し、当該機能は第三者ライブラリの解放関数を呼び出し、第三者ライブラリが申請したリソースを解放した後、呼び出しプロセスが終了する。
【0030】
具体的には、本実施例では以下の二つの第三者ライブラリを例として相互呼び出し方法を説明する:汎用CRC16アルゴリズムの第三者ライブラリと較正システム用の第三者ライブラリである。較正システム用の第三者ライブラリは、汎用のCRC16アルゴリズムに依存して目標コントローラに対してアンロック操作を行う。この二つの第三者ライブラリは順にソフトウェアプラットフォームにロードされ、ソフトウェアプラットフォームは統一的にユーザーにCRC16アルゴリズムの検証関数及び較正システムの較正関数を提供する。従来の汎用CRC16アルゴリズムの第三者ライブラリはコンパイル時に外部プログラム依存のAPI関数を導出する必要がある。従来の較正システム用の第三者ライブラリは汎用のCRC16アルゴリズムに依存する第三者ライブラリであるため、その内部は汎用のCRC16アルゴリズムの第三者ライブラリにおける依存関数を導入する必要があり、且つロード過程においてまず汎用のCRC16アルゴリズムの第三者ライブラリをロードする。汎用のCRC16アルゴリズムの第三者ライブラリが存在しないと、この較正システム用の第三者ライブラリはロードに失敗し、ソフトウェアプラットフォームのユーザーにいかなる機能も提供することができない。汎用のCRC16アルゴリズムの第三者ライブラリにおける関数が変更されると、例えばCRC16アルゴリズム関数のパラメータは三つから四つに増加し、較正システム用の第三者ライブラリは何らかの原因で同期更新されず、この場合、二つの第三者ライブラリはいずれも正常にロードすることができるが、較正システム用の第三者ライブラリがCRC16ライブラリを呼び出す過程で崩壊が発生する。従って従来のソフトウェアプラットフォームのライブラリが静的リンクによって他のライブラリを参照する方法は、運転期間にインタフェース定義の検査に欠けるという欠陥に加え、ソフトウェアプラットフォームの利用可能性を低下させ、問題が発生して調査しにくい。本実施例で提供するソフトウェアプラットフォームは異なる方法を採用し、その動作フローは以下のとおりである:CRC16第三者ライブラリ及び較正システム用第三者ライブラリは、外部プログラムの依存するAPIをいずれも内部関数とし、いずれのAPI関数を導出しない。ソフトウェアプラットフォームはCRC16第三者ライブラリ及び較正システム用の第三者ライブラリを順にロードする。ソフトウェアプラットフォームはこの二つの第三者ライブラリの能力取得関数を呼び出し、各ライブラリの内部関数リスト及び各関数の定義情報を得て、関数アドレス情報、パラメータ情報等を含む。ソフトウェアプラットフォームは各第三者ライブラリの依存関数を分析し、較正システム用の第三者ライブラリがCRC16第三者ライブラリに依存することを検出し、そして較正システム用の第三者ライブラリにおける依存関数アドレス情報をCRC16第三者ライブラリの対応する関数アドレス情報に代入する。ソフトウェアプラットフォームは各第三者ライブラリの依存関数のパラメータ情報等を含む関数定義情報を分析する。CRC16第三者ライブラリの内部API関数定義と較正システム用の第三者ライブラリの対応する依存関数定義が異なるのを発見すると、ユーザーに警告し、且つ較正システム用の第三者ライブラリの実行を禁止する。第三者ライブラリ間の依存関係に問題がないことを検証した後、ソフトウェアプラットフォームは正常にこの二つの第三者ライブラリを呼び出すことができ、ユーザーにサービスを提供する。
【0031】
実施例2
実施例1に加えて、本実施例2はさらに実施例1におけるソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法用のソフトウェアプラットフォームを提供し、ソフトウェアプラットフォームのヘッダファイル、ソフトウェアプラットフォームAPIリスト、ソフトウェアプラットフォームバージョン番号、ユーザー論理コールバックサブモジュールのリスト、第三者ライブラリが依存する外部サブモジュールリスト、ユーザー機能論理サブモジュール及びC++コンパイラを含む。
【0032】
本実施例において、ソフトウェアプラットフォームが含む各サブモジュール及び機能は実施例1において既に詳細に説明し、本実施例において説明を省略する。
【0033】
実施例3
実施例1に加えて、本実施例3はさらに実施例1におけるソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法用第三者ライブラリを提供し、以下を含む:初期化サブモジュール、能力取得サブモジュール、内部サブモジュール及び解放サブモジュールである。
【0034】
本実施例において、第三者ライブラリに含まれる各サブモジュール及び機能は実施例1において詳細に説明され、本実施例において説明を省略する。
【0035】
実施例4
図4は本発明が設計する相互呼び出しシステムの原理ブロック図である。
実施例1に加えて、本実施例4はさらに実施例1におけるソフトウェアプラットフォーム用第三者ライブラリ関数の相互呼び出し方法を用いる相互呼び出しシステムを提供し、以下を含む:構築モジュールであって、複数の第三者ライブラリを構築する。検証モジュールであって、第三者ライブラリの合法性を検証する。呼び出しモジュールであって、複数の第三者ライブラリは相互呼び出しを行う。
【0036】
本実施例において、各モジュールの具体的な機能は実施例1において既に詳細に説明し、本実施例において説明を省略する。
【0037】
実施例5
上記実施例に加えて、本実施例5はさらに呼び出し装置を提供し、ソフトウェアプラットフォーム及び複数の第三者ライブラリを含む。上記ソフトウェアプラットフォームは第三者ライブラリを構築し、且つ第三者ライブラリを呼び出すことに適する。第三者ライブラリはソフトウェアプラットフォームによって相互呼び出しを実現することができる。
本実施例において、上記ソフトウェアプラットフォーム及び第三者ライブラリの機能は上記実施例において詳細に説明され、本実施例において説明を省略する。
【0038】
以上をまとめると、本発明は、複数の第三者ライブラリを構築すること、及び複数の第三者ライブラリが相互に呼び出しを行うことにより、ソフトウェアプラットフォームを介して一つの汎用の呼び出しフレームを実現し、第三者ライブラリがソフトウェアプラットフォームに登録された関数は全てのロードされた第三者ライブラリの間に共有することができる。このように現在第三者ライブラリは他の第三者ライブラリを呼び出す必要がある場合、他の第三者ライブラリをロードする必要がなく、ソフトウェアプラットフォームが他の第三者ライブラリを含んだ、現在の第三者ライブラリに共有する関数表を使用すれば、他の第三者ライブラリへのアクセスを実現することができる。他の第三者ライブラリがロードされない場合、ソフトウェアプラットフォーム及び現在の第三者ライブラリはいずれもこの状況を知ることができ、これにより現在の第三者ライブラリを円滑にロードし且つ一部の機能を提供する。
【0039】
本願の提供するいくつかの実施例において、当然のことながら、開示された装置及び方法は、他の方式によって実現することもできる。上記で説明した装置の実施例は単なる例示であり、例えば、図面におけるフローチャート及びブロック図は本発明の複数の実施例による装置、方法及びコンピュータプログラム製品の実現可能なアーキテクチャ、機能及び操作を示す。この点に関して、フローチャート又はブロック図における各ブロックは、所定の論理機能を実行するための一つ以上の実行可能命令を含むモジュール、プログラムセグメント、又はコードの一部を表すことができる。なお、いくつかの代替的な実現方式において、ブロックに表記された機能は図面に表記された順序と異なる順序で発生してもよい。例えば、二つの連続するブロックは、実際には実質的に並行して実行することができ、関連する機能に応じて、時には逆の順序で実行することもできる。また、ブロック図及び/又はフローチャートの各ブロック、並びにブロック図及び/又はフローチャートのブロックの組み合わせは、所定の機能又は動作を実行する専用のハードウェアベースのシステムで実現されてもよく、又は専用のハードウェアとコンピュータ命令との組み合わせで実現されてもよいことに留意されたい。
【0040】
また、本発明の各実施例における各機能モジュールは一体に集積して一つの独立した部分を形成してもよく、各モジュールが単独で存在してもよく、二つ又は二つ以上のモジュールを集積して一つの独立した部分を形成してもよい。
【0041】
上記機能はソフトウェア機能モジュールの形式で実現し且つ独立した製品として販売又は使用する場合、一つのコンピュータの読み取り可能な記憶媒体に記憶することができる。このような理解に基づき、本発明の技術的解決手段は本質的に又は従来技術に寄与する部分又は当該技術的解決手段の部分はソフトウェア製品の形式で表すことができる。当該コンピュータソフトウェア製品は記憶媒体に記憶され、複数のコマンドを含んでコンピュータ装置(パーソナルコンピュータ、サーバ、又はネットワーク装置等であってもよい)に本発明の各実施例に記載の方法の全部又は一部のステップを実行させる。前述の記憶媒体は以下を含む:Uディスク、リムーバブルディスク、リードオンリーメモリ(ROM,Read-Only Memory)、ランダムアクセスメモリ(RAM,Random Access Memory)、磁気ディスク又は光ディスク等の各種のプログラムコードを記憶できる媒体。
【0042】
上述した本発明による好ましい実施例を啓発して、上述した説明内容から、当業者は本発明の技術的思想を逸脱しない範囲内で多様な変更及び修正を行うことができる。本発明の技術的範囲は明細書の内容に限定されず、特許請求の範囲に基づいてその技術的範囲を確定しなければならない。
【国際調査報告】