C# Code Sequence particulars
Calling library functions in C# is very similar to the C/C++ example below from the Basic Demo Code Sequence. The only significant difference is the necessity to use the Marshal class when passing pointers.
using System.Runtime.InteropServices; //add to top of source code to include Marshal
For example, when getting the F_Report_Message() string value, it should be retrieved as follows:
String text;
text = Marshal.PtrToStringAnsi(FLASHPROM_API.F_Report_Message());
Another commonly used example is reading and writing using byte arrays, i.e. using functions F_Read_Bytes_Block() and F_Write_Bytes_Block_to_RAM()
int response;
const Int32 size = 64;
Int32 addr;
byte []data_block = new byte[size];
IntPtr data_block_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(data_block[0]) * data_block.Length);
addr = mcu.x.RAMStartAddr;//or use custom address
for(k=0; k<size; k++)
data_block[k] = (byte)(0x30 + k);
try
{
Marshal.Copy(data_block, 0, data_block_ptr, size);
unsafe
{
//----------------------------------------------------
response = FLASHPROM_API.F_Write_Bytes_Block_to_RAM(addr, size, (byte*)data_block_ptr);
//----------------------------------------------------
}
}
finally
{
Marshal.FreeHGlobal(data_block_ptr);
}
Basic code example is compatible with C#, and can be found here: C/C++ Basic Demo Code Sequence