calling c++ from c# example
Example: C++ in C#
//you will be using the using
using System.Runtime.InteropServices;
//Before we begin you must understand you cannot truely import CPP.
//Only static functions and structs for data can be imported. This
//may mean writeing a quick CCP class to static name space wrapper
//on the CPP side and then importing. This may take passing a
//pointer to the class its self and passing of structs for the data.
//Note that the .dll should be in the same folder as the C# directory
//or registered with your OS
//Importing a static Function to a method. You may want to wrap the functions
//with a more C# frendly method to get the types to play well together in C#
//For indstance I have seen methods in CPP where two calls are required
//one for a count and one for the array list its self. This could be
//method wrapped to call both times for a single call using a special contianer in C#.
//but the below is the import type table
[DllImport("TheSource.dll", EntryPoint = "TheCPPFunction")]
static extern int/*Return type must match your CPP return*/
YourInitImportSignature(/*any params that match your CPP params*/);
//Type Equiviants rough (you can sometimes interchange them or usage may change them)
// CPP C#
// char byte or char
// short short
// unsigned short ushort
// int int or IntPtr(as a underef pointer) or EnumType
// unsigned int uint
// long int long
// unsigned long int ulong
// double double
// short short
//Special type modifiers
//CPP C#
//*(pointer)type Type[] or IntPtr or StructLayout(LayoutKind.Sequential) marked struct
//*(pointer)char char[] and/or string
//&(reference)type ref type and/or out
//Note Enums can be in int places but must be cast with a wrapping class
//after ecxternal import as C++ will treat them as ints in use.
//Importing a struct
[StructLayout(LayoutKind.Sequential)]
struct YourLayoutOfCPPStrunct
{
//Add your properties as is the same in the C++ class in the squent order
public string FistTextLocation;
public int SecondInt;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
public byte[] LoctionArrays;
}
// you can mostly follow the above equivalants, but arrays must now be give
// a size according to the CPP's values.
//Some of this will be detective work and a guessing game to see what imports propertly.