Marshalling eines out-parameters



  • Guten Mittag,

    ich habe ein Array auf der C#-Seite. Eine C++-Funktion soll dieses Array füllen. Wie viele Elemente es insgesamt sind, ergibt sich auch erst in der C++-Funktion. Kann ich so etwas überhaupt marshaln?

    Beispielcode:

    using System;
    using System.Runtime.InteropServices;
    
    namespace Test
    {
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
        public struct bar
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
            public string Name;
        };
    
        public class foo
        {
            void csharp_fkt()
            {
                bar[] arr;
                cpp_fkt(out arr); // Die C++ Fuktion soll das Array dynamisch füllen.
            }
    
            [DllImport("LIB_NAME")]
            public static extern void cpp_fkt(out bar[] arr); // Wie müsste ich hier den out-parameter marshaln?
        }
    }
    

    Danke euch 🙂

    Mfg out



  • [System.Runtime.InteropServices.Out] bar[] args
    Wenn es ein Pointer ist müssstest du aber auch noch http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute verwenden. Dort dann Array angeben.


Anmelden zum Antworten