「C++の応用 - C Sharp DLLの使用」の版間の差分

ナビゲーションに移動 検索に移動
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;
   
   
     // C#ライブラリのクラスとメソッドの取得
     // アセンブリのイメージの読み込み (アセンブリ内のコード情報を保持しているもの)
     MonoImage  *image      = mono_assembly_get_image(assembly);
     MonoImage  *image      = mono_assembly_get_image(assembly);
     const char *className = "SampleLibrary.SampleClass";         // "<名前空間名>.<クラス名>"を入力する
    if (!image) mono_jit_cleanup(domain); return -1;
     const char *methodName = "SampleMethod";                       // メソッド名を入力する
     MonoClass  *klass      = mono_class_from_name(image, "", className);
    // 名前空間およびクラス名を指定
     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);
   
   
    // インスタンスの作成
    MonoObject *instance  = mono_object_new(domain, klass);
    mono_runtime_object_init(instance);
   
   
     // C#ライブラリのメソッドに引数がある場合 (以下の例では、第1引数 : int型、第2引数 : string型)
     // C#ライブラリのメソッドに引数がある場合 (以下の例では、第1引数 : int型、第2引数 : string型)

案内メニュー