Using Sys_GetConfigString in C#

Hi,

I’ve being trying to use function Sys_GetConfigString from Toradex CE Lib 2.1 in C# with .NET Compact Framework 3.5 with Visual Studio 2008 to get Mac Address.

[DllImport("TdxAllLibrariesDll.dll")]
public static extern bool Sys_GetConfigString(IntPtr hSys, string paramName, string pValue, UInt32 maxBytes);

I did everything to pre-allocate string for pValue but nothing works. Even changing lib to support StringBuilder instead of a string for pValue still doesn’t work.

string mac = new string('\0', 12);
StringBuilder mac = new StringBuilder(12);

Am I missing something? Please, I need help on this. Function Sys_GetConfigInt works perfectly to get all parameters involved like BspVersion, EbootVersion, etc.

Hi @rafael.assakawa

Please try the following for importing the function:

[DllImport("TdxAllLibrariesDll.dll")]
public static extern Int32 Sys_GetConfigString(IntPtr hSys, byte[] paramName, byte[] pValue, UInt32 maxBytes);

And the following for calling it:

IntPtr sys = Sys_Init();
Int32 ret;
byte[] mac = new byte[48];
ret = Sys_GetConfigString(sys, Encoding.Unicode.GetBytes("Mac"), mac, 48);

This should hopefully work.

Regards,
Stefan

Thanks. Using byte array instead of string I managed to get Mac Address.

Another option would be to use a stringbuilder. The definition then looks as follows:

[DllImport("TdxAllLibrariesDll.dll")]
public static extern UInt32 Gpio_GetConfigString(IntPtr hGpio, gpio.uIo io, string paramName2, StringBuilder pValue , Int32 maxBytes);

Regards, Andy

Can confirm the StringBuilder approach works on WEC2013:

[DllImport("TdxAllLibrariesDll.dll")]
public static extern UInt32 Sys_GetConfigString(IntPtr hSys, string paramName, StringBuilder pValue, UInt32 maxBytes);

It’d be nice if this was included in TdxAllLibraries.cs so (more) people don’t have to waste time debugging and searching for solutions.

Dear @Monomix
Thank you for the feedback. I added your suggestion to our bug and feature tracking system.
Regards, Andy