[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