passing dynamic MyStruct[] from unmanaged dll to C#
-
I have to pass a dynamic array of structures from an unmanaged DLL to C#. I wrote the following wrapper-function. Unmanaged C++ DLL:
typedef struct browserStruct { unsigned long id; unsigned char name[250]; } structTypBrowser; extern "C" __declspec(dllexport) unsigned long __stdcall sv_getDocClassList( unsigned long &cnc, unsigned short numOfElems, structTypBrowser *browserArray ) {...}
In C#:public struct svStructTypBrowser { private UInt32 m_id; private string m_name; } [DllImport("SVConDll.dll")] private static extern UInt32 sv_getDocClassList( out UInt32 c, out ushort numOfElems, out IntPtr browserArray // svStructTypBrowser ); public getDocClassList() { IntPtr p1; svStructTypBrowser[] m_docClasses; ... try { result = sv_getDocClassList(out m_cnc, out noe, out p1); m_docClasses = (svStructTypBrowser[])Marshal.PtrToStructure(p1, typeof(svStructTypBrowser)); } }
The IntPtr p1 is null after calling sv_getDocClassList(). Has anybody a solution?