知識マップ: Ada と C / C# をつなぐ ── DLL を作って呼び出す
記事「Ada と C / C# をつなぐ ── DLL を作って呼び出す」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
AdaはC言語とのインターフェースを参照マニュアルの附属書Bに定めており、Convention => CでC ABIに合わせて関数を公開したり呼び出したりする。呼び出し規約もConventionで指定し、Win32 APIは__stdcallで呼ぶ。GPRbuildのプロジェクトでLibrary_Interfaceを指定するとスタンドアロンライブラリになり、Library_Auto_Initを有効にすれば読み込み時にエラボレーションが行われる。Windows向けにはDLLになり、GNATのランタイムのDLLとともにDLLの検索順序で見つかる場所に置く。Windowsでは、ライブラリのレベルで宣言したAdaのタスクをスタンドアロンライブラリで使えない。C#からはP/InvokeのLibraryImportかDllImportで呼び、LibraryImportは文字列の扱いをStringMarshallingで指定する。公開した関数で処理しなかったAdaの例外は、Linuxでの実験ではCでもC#でもプロセスを終了させた。
flowchart LR
accTitle: AdaとC/C#をつなぐ記事の知識マップ
accDescr: AdaのC言語とのインターフェースがC ABIと呼び出し規約を使うこと、GPRbuildで作るスタンドアロンライブラリがエラボレーションを自動で行い、WindowsではDLLになってDLLの検索順序で探されること、C#からはLibraryImportとDllImportによるP/Invokeで呼ぶこと、処理しなかったAdaの例外が未処理例外になることを示す図。
ada_c_interop["AdaとC/C++の相互運用(Annex B)"]
ada["Ada(プログラミング言語)"]
gnat["GNAT"]
c_abi["C ABI(Application Binary Interface)"]
calling_convention["呼び出し規約(calling convention)"]
win32_api["Win32 API"]
ada_stand_alone_library["スタンドアロンライブラリ(Stand-alone Library)"]
gprbuild["GPRbuild"]
ada_elaboration["エラボレーション(elaboration)"]
ada_task["Adaのタスク(並行処理)"]
dll["DLL(ダイナミックリンクライブラリ)"]
dll_search_order["DLLの検索順序"]
libraryimport["LibraryImport"]
p_invoke["P/Invoke"]
dllimport["DllImport"]
stringmarshalling["StringMarshalling"]
unhandled_exception["未処理例外"]
ada -->|"実装を担う"| ada_c_interop
gnat -->|"実装を担う"| ada
ada_c_interop -->|"利用する"| c_abi
ada_c_interop -->|"利用する"| calling_convention
win32_api -->|"前提とする"| calling_convention
ada_stand_alone_library -->|"で構成できる"| gprbuild
ada_stand_alone_library -.->|"自動化する"| ada_elaboration
ada_task -.->|"両立しない"| ada_stand_alone_library
ada_stand_alone_library -.->|"利用する"| dll
dll -.->|"前提とする"| dll_search_order
libraryimport -->|"実装を担う"| p_invoke
dllimport -->|"実装を担う"| p_invoke
libraryimport -->|"利用する"| stringmarshalling
p_invoke -->|"利用する"| dll
ada_c_interop -.->|"原因になり得る"| unhandled_exception
概念間の関係(全15件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Ada(プログラミング言語)はAdaとC/C++の相互運用(Annex B)の実装を担います。
- GNATはAda(プログラミング言語)の実装を担います。
- AdaとC/C++の相互運用(Annex B)はC ABI(Application Binary Interface)を利用します。
- AdaとC/C++の相互運用(Annex B)は呼び出し規約(calling convention)を利用します。
- Win32 APIは呼び出し規約(calling convention)を前提とします。
- スタンドアロンライブラリ(Stand-alone Library)はGPRbuildで構成できます。
- スタンドアロンライブラリ(Stand-alone Library)はエラボレーション(elaboration)を自動化します。
- Adaのタスク(並行処理)はスタンドアロンライブラリ(Stand-alone Library)と両立しません。
- スタンドアロンライブラリ(Stand-alone Library)はDLL(ダイナミックリンクライブラリ)を利用します。
- DLL(ダイナミックリンクライブラリ)はDLLの検索順序を前提とします。
- LibraryImportはP/Invokeの実装を担います。
- DllImportはP/Invokeの実装を担います。
- LibraryImportはStringMarshallingを利用します。
- P/InvokeはDLL(ダイナミックリンクライブラリ)を利用します。
- AdaとC/C++の相互運用(Annex B)は未処理例外の原因になることがあります。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。