Pass array to C# from C++ via mono -


i need pass array c++ c# using mono. can't mono_array_set() compile. how can pass array c++ c#?

i've tried mono_runtime_invoke() compiles gives runtime error.

mcs /nologo /warn:4 /debug:pdbonly /o /nowarn:3003 /platform:x64 /out:array.dll /target:library array.cs g++ array.cpp -g3 `pkg-config --cflags --libs mono-2` -o array <snip>  array.cpp:32:5: note: in expansion of macro ‘mono_array_set’ 

// array.cpp #include <mono/jit/jit.h> #include <mono/metadata/assembly.h> #include <mono/metadata/debug-helpers.h>  int main(int argc, char* argv[]) {     monodomain* domain = mono_jit_init("./array.dll");;     monoassembly* assembly = mono_domain_assembly_open(domain, "./array.dll");     monoimage* image = mono_assembly_get_image(assembly);      monoclass* containsclass = mono_class_from_name(image, "intarray", "containsanint");     monomethoddesc* containsdesc = mono_method_desc_new("intarray.containsanint:.ctor(int)", false);     monomethod* containsctor = mono_method_desc_search_in_class(containsdesc, containsclass);     monoobject* containsobject = mono_object_new(domain, containsclass);      void* args[1];     int value = 7;     args[0] = &value;      monoobject* exception = null;     mono_runtime_invoke(containsctor, containsobject, args, &exception);      monoclass* unpackageclass = mono_class_from_name(image, "intarray", "unpackage");      args[0] = containsobject;     monomethoddesc* returnintdesc = mono_method_desc_new("intarray.unpackage:returnint(intarray.containsanint)", true);     monomethod* returnintmethod = mono_method_desc_search_in_class(returnintdesc, unpackageclass);     mono_runtime_invoke(returnintmethod, null, args, &exception); // <--- expected, outputs "in returnint: 7"      monoarray* thearray = mono_array_new(domain, containsclass, 1);     //// following not compile     mono_array_set(thearray, monoclass*, 0, containsobject);     ////     monomethoddesc* returnelementdesc = mono_method_desc_new("intarray.unpackage:returnelement(intarray.containsanint[])", true);     monomethod* returnelementmethod = mono_method_desc_search_in_class(returnelementdesc, unpackageclass);     mono_runtime_invoke_array(returnelementmethod, null, thearray, &exception); // <--- should output "in returnelement: 7"      mono_jit_cleanup(domain); } 

// array.cs using system; using system.io;  namespace intarray {     public class containsanint {        public containsanint(int i) { intvalue = i;  }        public int intvalue { get; set; }     }     public class unpackage {         public static int returnint(containsanint n) {             console.writeline("in returnint: " + n.intvalue);              return n.intvalue;         }         public static int returnelement(containsanint[] n) {             console.writeline("in returnelement: " + n[0].intvalue);              return n[0].intvalue;         }     } } 

this works:

monoarray* thearray = mono_array_new(domain, containsclass, 1); mono_array_set(thearray, monoobject*, 0, containsobject); args[0] = thearray; mono_runtime_invoke(returnelementmethod, null, args, &exception); // <--- expected, outputs "in returnelement: 7" 

Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -