using System.Runtime.InteropServices;
namespace ConsoleApplication1
public sealed class MyUtil : IDisposable
[DllImport("HSdll.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void hs_init(IntPtr argc, IntPtr argv);
[DllImport("HSdll.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void hs_exit();
[DllImport("HSdll.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void getPoint(ref MyPoint mp);
[DllImport("HSdll.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int getArrlength();
[DllImport("HSdll.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void getArr([In, Out] MyPoint[] mpa);
Console.WriteLine("Initialising DLL...");
hs_init(IntPtr.Zero, IntPtr.Zero);
Console.WriteLine("Shutting down DLL...");
public MyPoint GetPoint()
MyPoint mp = new MyPoint();
Console.WriteLine(string.Format("Calling getPoint..."));
public MyPoint[] getArray()
int size = getArrlength();
MyPoint[] mpa = new MyPoint[size];
for (int i = 0; i < size; i++)
[StructLayout(LayoutKind.Sequential, Size = 8)]
public static void Main()
using (var mu = new MyUtil())
MyPoint mp = mu.GetPoint();
Console.WriteLine("numberx: {0}, numbery: {1}", mp.numberx, mp.numbery);
MyPoint[] mpa = mu.getArray();
foreach (var item in mpa)
Console.WriteLine("Numx {0} , Numy {1}", item.numberx, item.numbery);