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

Zoltan Varga vargaz at gmail.com
Thu Aug 26 17:27:25 EDT 2004


                                      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