[Mono-devel-list] Mono runtime for C compilation problem

André Fontenele andre at ironhousefund.com
Fri Aug 27 10:10:20 EDT 2004


Thank you, man. It worked perfectly.
On Thu, 2004-08-26 at 18:27, Zoltan Varga wrote:
>                                       Hi,
> 
>   The mono embedding interfaces have changed before 1.0 was released, so
> the runtime structures are now opaque, this means a program can't access
> assembly->image, it needs to use a runtime provided function for this. 
> See the mono include files for a list of functions. For example, assembly->image
> is now mono_assembly_get_image ().
> 
>                 Zoltan
> 
> On Thu, 26 Aug 2004 14:52:36 -0300, André Fontenele
> <andre at ironhousefund.com> wrote:
> > Help!
> > 
> >         I've been trying to run some routines on mono so that I can use them on
> > my PostgreSQL Linux server as a stored procedure. Since there seems to
> > be no way to do this directly, I decided to do it with the
> > /usr/include/mono/ libraries on the runtime-devel rpm: C# -> Mono
> > Runtime -> C -> libpq -> PostgreSQL.
> >         The problem is with the Mono Runtime -> C part. I got this sample
> > (attached) from a list and tried to compile it in a thousand of
> > different ways, but it keeps giving me this error:
> > 
> > > /franke/a.c: In function `setup':
> > > /franke/a.c:35: error: dereferencing pointer to incomplete type
> > > /franke/a.c: In function `main':
> > > /franke/a.c:67: error: dereferencing pointer to incomplete type
> > 
> >         For some reason, the compiler isn't able to access the structs inside
> > the libraries. I reinstalled the libraries from the scratch...
> >         I'm stuck in this problem for days now :.(
> >         Can anyone give me an idea on what may be wrong? Or send me another
> > example of what worked when you tried to use the mono runtime in C
> > programs? I tried the example on the mono site, but that didn't help
> > much, since the code seems to use the same structs...
> > 
> >         Txs,
> >         Andre Fontenele
> >         IronHouse Fund
> > 
> > #include <mono/mini/jit.h>
> > #include <mono/metadata/environment.h>
> > #include <mono/metadata/debug-helpers.h>
> > #include <mono/metadata/loader.h>
> > #include <mono/metadata/mono-debug.h>
> > 
> > static MonoDomain *domain;
> > static MonoAssembly *assembly;
> > 
> > /*
> >  * Very simple mono embedding example.
> >  * Compile with:
> >  *      gcc -o teste teste.c `pkg-config --cflags --libs mono` -lm
> >  *      mcs test.cs
> >  * Run with:
> >  *      ./teste test.exe
> >  */
> > static void setup()
> > {
> >         assembly = mono_domain_assembly_open(domain, "test.dll");
> >         if(assembly==NULL)
> >         {
> >                 printf("could not load assembly\n");
> >                 mono_environment_exitcode_set(-1);
> >         }
> >         else
> >         {
> >                 printf("assembly loaded succesfully\n");
> >                 mono_debug_init_2(assembly);
> >                 domain->entry_assembly=assembly; //HERE'S THE PROBLEM!!!
> >                 mono_environment_exitcode_set(0);
> >         }
> > }
> > 
> > int main(int argc, char* argv[])
> > {
> >         //MonoClass * class;
> >         //MonoDomain *domain;
> >         MonoMethod *method;
> >         MonoMethodDesc *methodDesc;
> >         //MonoObject *returnedMonoObject;
> >         gpointer params[1];
> > 
> >         domain = mono_jit_init ("TestDomain");
> >         if(domain == NULL)
> >         {
> >                 printf("could not init domain\n");
> >                 return 0;
> >         }
> >         mono_debug_init(domain, MONO_DEBUG_FORMAT_MONO);
> >         mono_runtime_exec_managed_code(domain, setup, NULL);
> > 
> >         // Create the method description
> >         methodDesc = mono_method_desc_new("TestNamespace.test:foo", TRUE);
> >         if(!methodDesc)
> >                 printf("Error in creating methodDesc \n");
> >         else
> >                 printf("methodDesc created succesfully\n");
> > 
> >         // Search the above method description in image
> >         method = mono_method_desc_search_in_image(methodDesc, assembly->image);
> > //AND HERE TOO!!!
> >         if(!method)
> >                 printf("Method could not be located in class \n");
> >         else
> >                 printf("Method located successfully\n");
> > 
> >         // invoke method
> >         params[0]= mono_string_new(domain, "TestFile.txt");
> >         mono_runtime_invoke(method, NULL, params, NULL );
> > 
> >         mono_jit_cleanup (domain);
> >         return 1;
> > }
> > 
> > _______________________________________________
> > Mono-devel-list mailing list
> > Mono-devel-list at lists.ximian.com
> > http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >




More information about the Mono-devel-list mailing list