mono_method_desc_search_in_image problem, and some question...

pierre <[email protected]> Mon, 12 Feb 2018 00:45:33 +0100
Newsgroups gmane.comp.gnome.mono.general
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--===============7186825149016498947==
Content-Type: multipart/alternative;
 boundary="------------F8FB6A229B538AD8E757E880"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------F8FB6A229B538AD8E757E880
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 8bit

Hi,

I am trying to embed mono... and I ran into a problem:
with the code:
   TypeMethodDesc = mono_method_desc_new("Script:Main", 0);
   method = mono_method_desc_search_in_image(TypeMethodDesc, 
monoEngine->image);

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 code:

    public class Script*2*
    {
       static public void Main ()
       {
         ScriptEngine.report("--Main Called ");
       }
    }


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 an error, but the new script seems (not always at least) 
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 everytime.
Lastly, Is there a way to compile cs source without launching a

    system("msc.code.cs -target:library");

thanks in advance

Pierre


--------------F8FB6A229B538AD8E757E880
Content-Type: text/html; charset=windows-1252
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi,<br>
    <br>
    I am trying to embed mono... and I ran into a problem:<br>
    with the code: <br>
      TypeMethodDesc = mono_method_desc_new("Script:Main", 0);<br>
      method = mono_method_desc_search_in_image(TypeMethodDesc,
    monoEngine-&gt;image);<br>
    <br>
    is returning a method on the cs code:<br>
    <blockquote><tt>public class Script</tt><tt><br>
      </tt><tt>{</tt><tt><br>
      </tt><tt>  static public void Main ()</tt><tt><br>
      </tt><tt>  {</tt><tt><br>
      </tt><tt>    ScriptEngine.report("--Main Called ");</tt><tt><br>
      </tt><tt>  }</tt><tt><br>
      </tt><tt>}</tt><br>
    </blockquote>
    <br>
    but it is also returning a method on the code:<br>
    <br>
    <blockquote><tt>public class Script<b>2</b></tt><tt><br>
      </tt><tt>
        {</tt><tt><br>
      </tt><tt>
          static public void Main ()</tt><tt><br>
      </tt><tt>
          {</tt><tt><br>
      </tt><tt>
            ScriptEngine.report("--Main Called ");</tt><tt><br>
      </tt><tt>
          }</tt><tt><br>
      </tt><tt>
        }</tt><br>
    </blockquote>
    <br>
    and a question:<br>
    is there a way to know if mono_domain_unload was successful or not?
    <br>
    <br>
    I am creating an app domain per script so that I can recompile and
    reload the script at will... <br>
    I do not detect an error, but the new script seems (not always at
    least) not to replace the old one...<br>
    Basically, I am doing:<br>
    <blockquote><tt>res = mono_domain_set(rootDomain, FALSE);</tt><br>
      <tt>mono_domain_unload(monoEngine-&gt;domain);</tt><br>
      <tt>monoEngine-&gt;domain =
        mono_domain_create_appdomain("ScriptEngine-sub", NULL);</tt><br>
      <br>
      <tt>data = readFile(f, &amp;dataLen);</tt><br>
      <tt>fclose(f);</tt><br>
      <tt>monoEngine-&gt;image =
        mono_image_open_from_data_with_name(data, dataLen, </tt><br>
      <tt>                                                          TRUE
        /* copy data */, </tt><br>
      <tt>                                                         
        &amp;status, </tt><br>
      <tt>                                                         
        FALSE /* ref only */, </tt><br>
      <tt>                                                         
        monoEngine-&gt;fileName);</tt><br>
      <tt>  free(data);</tt><br>
      <tt>  if (status != MONO_IMAGE_OK || monoEngine-&gt;image == NULL)</tt><br>
      <tt>  {</tt><br>
      <tt>    return FALSE;</tt><br>
      <tt>  }</tt><br>
      <br>
      <tt>    // load the assembly</tt><br>
      <tt>  monoEngine-&gt;assembly =
        mono_assembly_load_from_full(monoEngine-&gt;image, </tt><br>
      <tt>                                                     
        monoEngine-&gt;fileName, </tt><br>
      <tt>                                                     
        &amp;status, FALSE);</tt><br>
      <tt>  if (status != MONO_IMAGE_OK || monoEngine-&gt;assembly ==
        NULL)</tt><br>
      <tt>  {</tt><br>
      <tt>    mono_image_close(monoEngine-&gt;image);</tt><br>
      <tt>    return FALSE;</tt><br>
      <tt>  }</tt><br>
    </blockquote>
    but it does not seem to work everytime.<br>
    Lastly, Is there a way to compile cs source without launching a <br>
    <blockquote><tt>system("msc.code.cs -target:library");</tt><br>
    </blockquote>
    thanks in advance<br>
    <br>
    Pierre<br>
    <br>
  </body>
</html>

--------------F8FB6A229B538AD8E757E880--

--===============7186825149016498947==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTW9uby1saXN0
IG1haWxsaXN0ICAtICBNb25vLWxpc3RAbGlzdHMuZG90Lm5ldApodHRwOi8vbGlzdHMuZG90Lm5l
dC9tYWlsbWFuL2xpc3RpbmZvL21vbm8tbGlzdAo=

--===============7186825149016498947==--