Hi Jim,

I had a regression (it was actually my mistatake) with 1.1.13
under Windows with my own mono embedding apps: I forgot
to set MONO_CFG_DIR to point to mono's etc directory.
This seems to prevent System.dll from beeing correctly
loaded.

You should either set both MONO_PATH and MONO_CFG_DIR
or use

mono_set_dirs (libdir, etcdir)

before calling mono_jit_init ().

HTH
Robert


I just noticed a warning saying that System.dll, which
is referenced by another loaded assembly, couldn't be
found and that the Mono-INFO messages (output as I
have MONO_LOG_LEVEL set to debug as a Windows
environment variable) suggest that mono isn't looking
for assemblied in the MONO_PATH, which is set to
C:\Apps\Mono-1.1.13\lib. If I copy System.dll from
C:\Apps\Mono-1.1.13\lib\mono\1.0 to the same directory
as debugsim.exe then I no longer get the warning about
System.dll _AND_ the error message on the call to
AppDomain.CreateDomain() changes to Unhandled
exception at 0x7c964ed1 in debugsim.exe: 0xC0000008:
An invalid HANDLE was specified. With the following
stack trace:

        ntdll.dll!7c964ed1()    
        ntdll.dll!7c964ed1()    
        ntdll.dll!7c9268ad()    
        ntdll.dll!7c91056d()    
        ntdll.dll!7c90e9c0()    
        ntdll.dll!7c91901b()    
        ntdll.dll!7c94243c()    
        msvcrt.dll!77c2c2de()   
        ntdll.dll!7c91056d()    
        msvcrt.dll!77c2c2de()   
        msvcrt.dll!77c2c2e3()   
        ntdll.dll!7c90104b()    
        mono.dll!1005a60e()     
        mono.dll!10079c8a()     
        mono.dll!10078dc9()     
        mono.dll!1007a813()     
        mono.dll!1007a327()     
        mono.dll!1007a4e0()     
        mono.dll!1007a5e0()     
        debugsim.exe!load_class(_MonoDomain *
domain=0x03839ae8)

So, have I just set up MONO_PATH incorrectly so the
embedded mono VM can't find the assemblies it needs
when it makes the AppDomain.CreateDomain() and
mono_assembly_open() calls? That would fit my theory
that it's something to do with my new Windows set up
that is causing the problem. Currently my MONO_PATH is
set to C:\Apps\Mono-1.1.13\lib in the "User variables"
section of the environment. Does that sound right?
Should I see Mono-INFO messages about probing
directories on the MONO_PATH if everything is working
properly? I don't remember seeing warnings about
unfound assemblies or having to copy assemblies to the
debugsim.exe directory before.

Thanks again for all your help,

Cheers,

Jim.

--- Jim Purbrick <[EMAIL PROTECTED]> wrote:

Thanks Zoltan,
I've got it working on Linux too and it used to work
on Windows until my hard drive died and I needed to
reinstall. I can't think how my old and new Windows
installations differ, so if you get it working I'll
be
interested to know how your Windows machine is set
up
and also how you're building mono on Windows. I
build
mono from source in cygwin using then build the
mono.dll using:

gcc -mno-cygwin -O -g -O2 -fno-strict-aliasing -g
-Wall -Wunused -Wmissing-prototypes
-Wmissing-declarations -Wstrict-prototypes
-Wmissing-prototypes -Wnested-externs
-Wpointer-arith
-Wno-cast-qual -Wcast-align -Wwrite-strings -shared
-o
mono.dll main.o -Wl,--export-dynamic
-Wl,--export-dynamic  ./.libs/libmono.a
-L/usr/local/lib -lgthread-2.0 -lgmodule-2.0
-lglib-2.0 -lintl -liconv -lws2_32 -lpsapi -lole32

I've looked in to building Mono in VS before, but at
the time I looked in to it there were problems with
stack walking, so not everything worked when you
built
Mono with VS and also you needed VS 2005 which was
only in beta at the time and SL only built in VS
2003.

Cheers,

Jim.

--- Zoltan Varga <[EMAIL PROTECTED]> wrote:


Hi,

 I tried the example code which creates

appdomains

from C code and it
really does crash
because some things are only set up in the runtime
when mono_jit_exec
() is called. So
your workaround of calling CreateDomain () from
managed code seems to
be the way to
go, at least for now. I tried it and it seems to
work on linux, I will
try to look into the
windows problems shortly.

                    Zoltan

On 1/11/06, Jim Purbrick <[EMAIL PROTECTED]>
wrote:

Hi Robert/Lupus/Everyone,

I've tried Robert's approach (which cleans my

code

up,

but is vulnerable to changes in _MonoAppDomain

as

Paolo said), but I still get the same crash when
making the mono_runtime_invoke() call to
AppDomain.CreateDomain().

At this point I'm struggling with the limited
debugging I can do in VS 2003 when the code

calls

in

to glib or the mono. The error I get is

Unhandled

exception at 0x10059acc in debugsim.exe:

0xC0000005:

Access violation reading location 0x00000007.

And

the

call stack is:

       mono.dll!10059acc()
       libglib-2.0-0.dll!0032bb3e()
       mono.dll!10059bad()
       libglib-2.0-0.dll!0032baf9()
       mono.dll!10059736()
       mono.dll!1002b3ba()
       mono.dll!1002b7a0()
       mono.dll!10067527()
       debugsim.exe!createDomain(const char *
name=0x0302edf8)  Line 31 + 0x11        C++

Which doesn't tell me a lot. I wonder whether

the

problem is something to do with my new Windows
configuration as the code worked fine with mono
1.1.9.2 in my old Windows installation, but now

I

get

this problem with mono 1.1.9.2, 1.1.12.1 and

1.1.13.

Could some differences in the environment be

causing

the problem? The value of MONO_PATH or some

other

environment variable? This is just wild

speculation

really. Is there anything else I can do to

diagnose

the problem?

At the moment I'm thinking the best thing to do

might

be to #define the code to use a single AppDomain

on

Windows and just do the secondary AppDomain

creation

and unloading on Linux, which is our production
environment anyway. I'm loathe to make the 2

versions

behave differently, but it would allow me to

make

some

forward progress while trying to sort this

problem

out

as a background task.

Thanks for all your help on this.

Cheers,

Jim.

--- Robert Jordan <[EMAIL PROTECTED]> wrote:


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

=== message truncated ===



                
___________________________________________________________ To help you stay safe and secure online, we've developed the all new Yahoo! Security Centre. http://uk.security.yahoo.com

_______________________________________________
Mono-devel-list mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to