[Mono-bugs] [Bug 557684] New: MonoEmbedded: 'mono_method_desc_search_in_class' doesn't find methods with struct parameter

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Mon Nov 23 05:19:44 EST 2009



           Summary: MonoEmbedded: 'mono_method_desc_search_in_class'
                    doesn't find methods with struct parameter
    Classification: Mono
           Product: Mono: Tools
           Version: 2.4.x
          Platform: i386
        OS/Version: Windows XP
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: tools
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: ralf.kornelius at kobil.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---

Description of Problem:

I have a test assembly with 2 methods:

- TestStructure:GetStructure()
- void:SendStructure(TestStructure)

 and I want to use this method in C-Code with MonoEmbedding.

When searching for the first method (with struct output/return-parameter),
'mono_method_desc_search_in_class' will find the method!
But when searching for the second method (with struct input-parameter),
'mono_method_desc_search_in_class' doesn't find the method and returns NULL!

Steps to reproduce the problem:
1. Compile C-Program with MonoEmbedding
// BugMonoStructParam.cpp : Definiert den Einstiegspunkt für die
#include <direct.h>        // for getcwd
#include <stdlib.h>        // for MAX_PATH

#include <assert.h>

#include <glib.h>
#include <mono/jit/jit.h>
#include <mono/metadata/assembly.h>
#include <mono/metadata/Debug-helpers.h>

int main(int argc, char* argv[])
    //Current Working Directory
    // _MAX_PATH is the maximum length allowed for a path
    char CurrentPath[_MAX_PATH];
    // use the function to get the path
    _getcwd(CurrentPath, _MAX_PATH);
    //Set paths

    MonoDomain *m_domain = mono_jit_init ("TestAssembly.dll");
    MonoAssembly *m_assembly = mono_domain_assembly_open (m_domain,
    MonoImage *m_image = mono_assembly_get_image  (m_assembly);
    MonoClass *klass = mono_class_from_name (m_image, "TestAssembly" , "Test");

    //Getting method with struct input-parameter via search
    MonoMethodDesc* descMethodeReturnStruct = mono_method_desc_new
    MonoMethod* monoMethodeReturnStruct = mono_method_desc_search_in_class
(descMethodeReturnStruct, klass); 
    assert(monoMethodeReturnStruct != NULL); //OK
    mono_method_desc_free (descMethodeReturnStruct);

    //Getting method with struct output-parameter direct
    MonoMethod* monoMethodTakeStruct_direct = mono_class_get_method_from_name
(klass, "SendStructure", 1);
    assert(monoMethodTakeStruct_direct != NULL); //OK

    //Getting method with struct output-parameter via search
    MonoMethodDesc* descMethodTakeStruct = mono_method_desc_new
    MonoMethod* monoMethodTakeStruct = mono_method_desc_search_in_class
(descMethodTakeStruct, klass); 
    assert(monoMethodTakeStruct != NULL);    //Crash --> Bug?

    mono_method_desc_free (descMethodTakeStruct);


2. Compile Managed Assembly "TestAssembly.dll"
using System;

namespace TestAssembly
    public class Test
        public struct TestStructure
            public int i;
            public float f;

        public void SendStructure(TestStructure s)
            Console.WriteLine("Integer: " + s.i);
            Console.WriteLine("Float: :" + s.f);

        public TestStructure GetStructure()
            TestStructure s;
            s.i = 42;
            s.f = float.MaxValue;

            return s;

3. Run C-Program

Actual Results:
Method with struct input-parameter can't be found by
Method with struct input-parameter can be found by

Expected Results:
Method with struct input-parameter should be found by

How often does this happen? 

Additional Information:

Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.

More information about the mono-bugs mailing list