[Mono-dev] Registering internal calls at runtime
Michel Boissé
mboisse at noesisinnovation.net
Tue Jul 13 18:37:19 EDT 2010
>> You cannot register the icall from within a method that eventually
>> calls the icall because the JIT does not know about the icall
>> at the time it compiles the method.
>>
>> Something like that should work:
>>
>> static void Main(string[] args)
>> {
>> Registrar.RegisterMethods();
>> DoWork();
>> }
>
> Just in case, inlining should be disabled for this method:
>
> [MethodImplAttribute(MethodImplOptions.NoInlining)]
> static void DoWork()
> {
> Console.Write(InternallyImplementedClass.InternalMethod());
> }
Moving the call to a different function with the NoInlining option isn't
working either.
We are digging deeper. We moved InternallyImplementedClass to a separate
assembly. It still doesn't work. Here's how it looks now:
1) DLL is loaded and registration is called from a static constructor
before Main( ) starts executing
2) Main( ) starts and InternallyImplementedClass' assembly is loaded
through reflection
4) InternalMethod is fetched and invoked through reflection
5) Exception thrown: "System.MissingMethodException: Cannot find the
requested method."
We'll have to hack in and see what's going on.
More information about the Mono-devel-list
mailing list