昨日も似たような質問をしましたが、これは少し違います。構造体の配列を C# から C++ に渡し、これを再び取得する際に問題が発生しています。
これがc++コードです。まず、構造体:
struct Tri
{
public:
int v1, v2, v3;
}
そして今、c++ dll 部分:
extern "C" __declspec(dllexport) void Dll_TriArray(Tri *tri)
{
int num = 10;
tri = new Tri[num];
for (int i = 0; i < num; i++)
{
tri[i].v1 = i + 5;
tri[i].v2 = i + 10;
tri[i].v3 = i + 25;
}
}
これが構造体から始まる c# コードです。
[StructLayout(LayoutKind.Sequential)]
public struct Tri
{
public int v1, v2, v3;
}
public class Testing
{
[DllImport("testing.dll")]
static extern void Dll_TriArray(out Tri[] tryArray);
public GetTriArray()
{
Tri[] triArray;
Dll_TriArray(out triArray);
}
}
したがって、GetTriArray メソッドを呼び出したときに取得した triArray は null として返されます。IntPtr を引数として渡すことを考えましたが、構造体の配列との間で intptr をマーシャリングするにはどうすればよいですか?
ところで-この段階では、メモリリークには興味がありません。