Pages

Monday, May 4, 2009

Calling a DLL with C# (C Sharp)

using System.Runtime.InteropServices;
using System;

class call_dll {

[StructLayout(LayoutKind.Sequential, Pack=1)]
private struct STRUCT_DLL {
public Int32 count_int;
public IntPtr ints;
}

[DllImport("mingw_dll.dll")]
private static extern int func_dll(
int an_int,
[MarshalAs(UnmanagedType.LPArray)] byte[] string_filled_in_dll,
ref STRUCT_DLL s
);

public static void Main() {

byte[] string_filled_in_dll = new byte[21];


STRUCT_DLL struct_dll = new STRUCT_DLL();
struct_dll.count_int = 5;
int[] ia = new int[5];
ia[0] = 2; ia[1] = 3; ia[2] = 5; ia[3] = 8; ia[4] = 13;

GCHandle gch = GCHandle.Alloc(ia);
struct_dll.ints = Marshal.UnsafeAddrOfPinnedArrayElement(ia, 0);

int ret=func_dll(5,string_filled_in_dll, ref struct_dll);

Console.WriteLine("Return Value: " + ret);
Console.WriteLine("String filled in DLL: " + System.Text.Encoding.ASCII.GetString(string_filled_in_dll));

}
}

0 comments:

Post a Comment