Bar.Work
以下の C# サンプル コードを考えると、Cから静的メソッドを呼び出すのは非常に簡単です。 を取得し、クラスから を取得して呼び出すだけですMonoClass*
。MonoMethod*
を取得するMonoClass*
には、Bar の名前空間を提供する必要があります。この場合は'sampleApp'
、関数にパラメーターとして指定します。
MonoClass *klass = mono_class_from_name(image, "sampleApp", "Bar");
問題は、のクラス名前空間MonoClass*
がわからない場合、C でを取得するにはどうすればよいかということです。Bar
C からアセンブリ内の型のリストを取得する手段はありますか? mono の埋め込みサンプルに例が見つかりませんでした。
C# サンプル
namespace sampleApp
{
class Bar {
public static void Work() {
Console.WriteLine("Bar.Work called");
}
}
class Program {
public static void Main(string[] args) {
Console.WriteLine("Program.Main called");
}
}
}
Bar.Work
C からの呼び出し
#include <mono/jit/jit.h>
#include <mono/metadata/mono-config.h>
#include <mono/metadata/metadata.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/class.h>
#include <mono/metadata/assembly.h>
#include <mono/metadata/image.h>
#include <mono/metadata/object.h>
#include <mono/metadata/debug-helpers.h>
int main(int argc, char **argv) {
mono_config_parse(NULL);
MonoDomain *domain = mono_jit_init_version("app", "v4.0.30319");
MonoAssembly *assembly = mono_domain_assembly_open(domain, "sampleApp.exe");
MonoImage *image = mono_assembly_get_image(assembly);
mono_jit_exec(domain, assembly, argc, argv);
//how can I find Bar class if I don't know that it is under the sampleApp namespace?
MonoClass *klass = mono_class_from_name(image, "sampleApp", "Bar");
MonoMethod *method = mono_class_get_method_from_name(klass, "Work", 0);
void *params[1] = { NULL };
mono_runtime_invoke(method, NULL, params, NULL);
mono_jit_cleanup(domain, assembly);
return 0;
}