13,002
回編集
(→概要) |
|||
318行目: | 318行目: | ||
#include <mono/jit/jit.h> | #include <mono/jit/jit.h> | ||
#include <mono/metadata/assembly.h> | #include <mono/metadata/assembly.h> | ||
#include <mono/metadata/object.h> | |||
#include <mono/metadata/appdomain.h> | |||
#include <mono/metadata/debug-helpers.h> | #include <mono/metadata/debug-helpers.h> | ||
#include <mono/metadata/exception.h> | |||
int main() | int main() | ||
{ | { | ||
// ドメインの初期化 | // ドメインの初期化 | ||
MonoDomain* domain = mono_jit_init("SampleApp"); | MonoDomain *domain = mono_jit_init("SampleApp"); | ||
if (!domain) return -1; | |||
// C#ライブラリのアセンブリの読み込み | // C#ライブラリのアセンブリの読み込み (中間言語IL) | ||
MonoAssembly* assembly = mono_domain_assembly_open(domain, "SampleLibrary.dll"); | MonoAssembly *assembly = mono_domain_assembly_open(domain, "SampleLibrary.dll"); | ||
if (!assembly) mono_jit_cleanup(domain); return -1; | |||
// | // アセンブリのイメージの読み込み (アセンブリ内のコード情報を保持しているもの) | ||
MonoImage *image = mono_assembly_get_image(assembly); | MonoImage *image = mono_assembly_get_image(assembly); | ||
const char * | if (!image) mono_jit_cleanup(domain); return -1; | ||
const char * | |||
MonoClass *klass = mono_class_from_name(image, "", | // 名前空間およびクラス名を指定 | ||
const char *nameSpace = "SampleLibrary"; // 名前空間を指定する | |||
const char *className = "SampleClass"; // クラス名を指定する | |||
MonoClass *klass = mono_class_from_name(image, nameSpace, className); | |||
if (!klass) mono_jit_cleanup(domain); return -1; | |||
// クラスのインスタンスを生成 | |||
MonoObject *instance = mono_object_new(domain, klass); | |||
if (!instance) mono_jit_cleanup(domain); return -1; | |||
// メソッド情報の取得 | |||
MonoMethodDesc *methodDesc = mono_method_desc_new("<名前空間名>.<クラス名>::<メソッド名>", true); | |||
if (!methodDesc) mono_jit_cleanup(domain); return -1; | |||
// メソッドの検索 | |||
MonoMethod *method = mono_method_desc_search_in_class(methodDesc, klass); | |||
if (!method) mono_jit_cleanup(domain); return -1; | |||
// C#ライブラリのメソッドの取得 | |||
MonoMethod *method = mono_class_get_method_from_name(klass, methodName, 0); | MonoMethod *method = mono_class_get_method_from_name(klass, methodName, 0); | ||
// C#ライブラリのメソッドに引数がある場合 (以下の例では、第1引数 : int型、第2引数 : string型) | // C#ライブラリのメソッドに引数がある場合 (以下の例では、第1引数 : int型、第2引数 : string型) |