I have the following C++ structs
struct InnerStruct
{
int A;
int B;
};
struct OuterStruct
{
int numberStructs;
InnerStruct* innerStructs;
};
And a C++ function
OuterStruct getStructs();
How can I marshal this to C#? Where the C# definitions is
struct OuterStruct {
InnerStruct[] innerStructs;
};
You’ll have to do this manually, since there’s no way to tell the P/Invoke layer how much data to marshal from your C++ return value.
Note that if you want to free the memory for
innerStructsfrom your C# code, you have to use the standard allocatorCoTaskMemAllocin your C++ code–then you can callMarshal.CoTaskMemFreeto freeinnerStructs.