[Mono-dev] Creating AppDomains From Embedded Mono

Robert Jordan robertj at gmx.net
Wed Jan 11 09:32:36 EST 2006


Hi Jim,

> Hi Robert/Everyone,
> 
> 
>>You can and *should* invoke the managed
>>AppDomain methods to load and unload domains. 
>>You don't need an intermediate managed assembly 
>>to do that (untested):
>>
>>MonoAppDomain*
>>createDomain (char *name) ....
>>
>>void
>>unloadDomain (MonoAppDomain *domain) ...
> 
> 
> That gets me a MonoAppDomain*, which I can presumably
> use to call AppDomain.Load(Byte[]) to load a script's
> assembly, which will be unloaded (along with JIT
> output etc.) when I call unloadDomain?

MonoAppDomain is the unmanaged representation of System.AppDomain.
You can call every System.AppDomain method using mono_runtime_invoke,
like in my sample above.

> How do I turn the MonoAppDomain in to a MonoDomain
> required by mono_object_new, mono_string_new etc.?

Indeed, there is no accessor defined for it, but you can
define this struct somewhere after you include appdomain.h:

struct _MonoAppDomain {
         MonoObject obj;
         MonoObject *identity;
         MonoDomain *data;
};

> That is what my intermediate managed assemblies were
> doing: executing an assembly in the new domain which
> would call mono_domain_get() to get me a MonoDomain*
> for the new MonoAppDomain.
 >
> Do I even need a MonoDomain* for the new
> MonoAppDomain? At the moment I try to allocate any
> objects used by a script in the AppDomain that I
> loaded the script's assembly in to, but I suppose I
> could allocate the other objects in the root domain.
> Would there be any problems doing this? My concern
> would be that the root domain would end up loading the
> script's assembly which I then couldn't unload.

You have to use the proper MonoDomain.

Robert




More information about the Mono-devel-list mailing list