Hi,Suppose I have this sample C# code:
using System;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"); } }}
On C side I want to launch mono, obtain Bar class pointer and call the
Bar.Work static method on it. This is easily achievable as shown below:
#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); 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;}
The crucial part is obtaining the /MonoClass*/. /mono_class_from_name()/
function takes a namespace as a parameter. This cannot be omitted. Since I
know the namespace of the class this is not a big deal. But what if I don't
know the classes' namespace?
When I launch my C program I want to scan the opened assembly for a class
Bar which has a Work static method in it. Ultimately I want to call the Work
method from C code.
I was unable to find any functions which would let me get a list types of
the assembly, list of namespaces or anything like that.
I've used http://www.mono-project.com/Embedding_Mono as reference, together
with embedding samples in mono's repository but I was unable to find
anything.
There's the reflection API available from C code which could potentially
achieve what I want, but I have no idea how to use it, though :(.Would
appreciate any help. Thanks.
--
View this message in context: http://mono.1490590.n4.nabble.com/Mono-Embedding-C-API-Get-a-MonoClass-without-knowing-the-namespace-tp4662178.html
Sent from the Mono - General mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-list/attachments/20140307/74b3a313/attachment-0001.html>