[Mono-dev] mono_method_desc_search_in_image problem, and some question...
pierre
pierre.saunier at ppmodeler.com
Tue Feb 13 08:16:53 UTC 2018
Thanks for the answer.
> you 100% sure the old files are all overwritten?
Yes, I have checked the file time... and also included a
remove(fileName);
to be sure!
>There are a couple of different ways to get compiled binary at runtime
without a system() call
Which ones?
I have tried something:
calling mono_image_open_from_data_with_name and
mono_assembly_load_from_full with a different file name on every compile
and it is working!!!
so, the following code is not reloading properly:
monoEngine->fileName = strdup("code.dll");
monoEngine->image = mono_image_open_from_data_with_name(data, dataLen,
TRUE /* copy data */,
&status,
FALSE /* ref only */,
monoEngine->fileName);
if (status != MONO_IMAGE_OK || monoEngine->image == NULL)
{
}
monoEngine->assembly = mono_assembly_load_from_full(monoEngine->image,
monoEngine->fileName,
&status, FALSE);
if (status != MONO_IMAGE_OK || monoEngine->assembly == NULL)
{
}
but, the same with a different file name on every run (only the
monoEngine->fileName creation differ) is working:
static int version = 1;
...
sprintf(monoEngine->fileName, "code%03d.dll", version);
version ++;
monoEngine->image = mono_image_open_from_data_with_name(data, dataLen,
TRUE /*
copy data */,
&status,
FALSE /* ref only */,
monoEngine->fileName);
if (status != MONO_IMAGE_OK || monoEngine->image == NULL)
{
}
monoEngine->assembly = mono_assembly_load_from_full(monoEngine->image,
monoEngine->fileName,
&status, FALSE);
if (status != MONO_IMAGE_OK || monoEngine->assembly == NULL)
{
}
Is there a wait to be introduced after a mono_domain_unload? It is like
doing mono_domain_unload, mono_image_open_from_data_with_name and
mono_assembly_load_from_full with the same file name is detected and the
unload is not performed....
> This is more likely to be a problem outside of mono.
I do agree... but I am running out of idea on why!!!
and for mono_method_desc_search_in_image? is it bug?
Pierre
On 13/02/2018 07:15, R Zaghi wrote:
> I think we need to know a bit more about what you are doing in the
> code exactly but as a quick first guess if you are recompiling using a
> system() call then are you 100% sure the old files are all
> overwritten? There are a couple of different ways to get compiled
> binary at runtime without a system() call which I prefer but if you
> are using a system() call then have you tried two separate calls with
> two parallel binaries loaded as a start to debug your code?
>
> This is more likely to be a problem outside of mono.
>
> Ramin
>
>
>
>
> Ramin Zaghi
>
> *Mosaic3DX™ | User Interface Technology*
> St John's Innovation Centre,
> Cowley Road,
> Cambridge,
> CB4 0WS, UK*
> *
> *E*:**rzaghi at mosaic3dx.com <mailto:rzaghi at mosaic3dx.com>
> *T*: +44 1223 421 311 <tel:+44%201223%20421311>
> http://linkedin.com/in/raminzaghi
>
>
>
> On Tue, 13 Feb 2018 at 01:27, pierre <pierre.saunier at ppmodeler.com
> <mailto:pierre.saunier at ppmodeler.com>> wrote:
>
> Hi,
>
> I am trying to embed mono... and I ran into a problem with the code:
>
> monoMethodDesc = mono_method_desc_new("Script:Main", 0);
> method = mono_method_desc_search_in_image(monoMethodDesc,
> monoEngine->image);
>
>
> It is returning a method on the cs code:
>
> public class Script
> {
> static public void Main ()
> {
> ScriptEngine.report("--Main Called ");
> }
> }
>
>
> but it is also returning a method on the cs code (with the wrong
> class name):
>
> public class Script*2*
> {
> static public void Main ()
> {
> ScriptEngine.report("--Main Called ");
> }
> }
>
> while it should only return for:
>
> monoMethodDesc = mono_method_desc_new("Script2:Main", 0);
>
>
> Am i doing something wrong or is this a bug? It seem that
> mono_method_desc_search_in_image is returning a value if the
> actual class name is starting with the given class name.... so,
> the same method is returned if I look for "Script:Main" but the
> declared class is "Script:Main", "Script_test:Main" or
> "Script2:Main"...
>
> and a question:
> is there a way to know if mono_domain_unload was successful or not?
>
> I am creating an app domain per script so that I can recompile and
> reload the script at will...
> I do not detect any error, but the new script seems not to replace
> the old one...
> Basically, I am doing:
>
> res = mono_domain_set(rootDomain, FALSE);
> mono_domain_unload(monoEngine->domain);
> monoEngine->domain =
> mono_domain_create_appdomain("ScriptEngine-sub", NULL);
>
> data = readFile(f, &dataLen);
> fclose(f);
> monoEngine->image = mono_image_open_from_data_with_name(data,
> dataLen,
> TRUE /* copy data */,
> &status,
> FALSE /* ref only */,
> monoEngine->fileName);
> free(data);
> if (status != MONO_IMAGE_OK || monoEngine->image == NULL)
> {
> return FALSE;
> }
>
> // load the assembly
> monoEngine->assembly =
> mono_assembly_load_from_full(monoEngine->image,
> monoEngine->fileName,
> &status, FALSE);
> if (status != MONO_IMAGE_OK || monoEngine->assembly == NULL)
> {
> mono_image_close(monoEngine->image);
> return FALSE;
> }
>
> but it does not seem to work. The code that runs is always the
> first loaded one!!
>
> I also added the following code to my engine:
>
> mono_trace_set_log_handler(monoLogCallback, NULL);
> mono_trace_set_print_handler(monoPrintCallback);
> mono_trace_set_printerr_handler(monoPrintCallback);
> mono_trace_set_level_string ("debug");
>
>
> but it is reporting debug info only on the first run... is there a
> way to having it working on every run?
>
> Lastly, Is there a way to compile cs source without launching a
>
> system("msc.code.cs -target:library");
>
> thanks in advance
>
> Pierre
>
>
>
> _______________________________________________
> Mono-list maillist -Mono-list at lists.dot.net <mailto:Mono-list at lists.dot.net>
> http://lists.dot.net/mailman/listinfo/mono-list
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.dot.net <mailto:Mono-devel-list at lists.dot.net>
> http://lists.dot.net/mailman/listinfo/mono-devel-list
>
> --
>
>
>
> Ramin Zaghi
>
> *Mosaic3DX™ | User Interface Technology*
> St John's Innovation Centre,
> Cowley Road,
> Cambridge,
> CB4 0WS, UK*
> *
> *E*:**rzaghi at mosaic3dx.com <mailto:rzaghi at mosaic3dx.com>
> *T*: +44 1223 421 311
> http://linkedin.com/in/raminzaghi
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dot.net/pipermail/mono-devel-list/attachments/20180213/a94339df/attachment.html>
More information about the Mono-devel-list
mailing list