45 lines
1.0 KiB
C#
45 lines
1.0 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using Facepunch.Steamworks.Data;
|
|
|
|
namespace Facepunch.Steamworks.Ugc
|
|
{
|
|
internal struct SteamParamStringArray : IDisposable
|
|
{
|
|
public SteamParamStringArray_t Value;
|
|
|
|
IntPtr[] NativeStrings;
|
|
IntPtr NativeArray;
|
|
|
|
public static SteamParamStringArray From( string[] array )
|
|
{
|
|
var a = new SteamParamStringArray();
|
|
|
|
a.NativeStrings = new IntPtr[array.Length];
|
|
for ( int i = 0; i < a.NativeStrings.Length; i++ )
|
|
{
|
|
a.NativeStrings[i] = Marshal.StringToHGlobalAnsi( array[i] );
|
|
}
|
|
|
|
var size = Marshal.SizeOf( typeof( IntPtr ) ) * a.NativeStrings.Length;
|
|
a.NativeArray = Marshal.AllocHGlobal( size );
|
|
Marshal.Copy( a.NativeStrings, 0, a.NativeArray, a.NativeStrings.Length );
|
|
|
|
a.Value = new SteamParamStringArray_t
|
|
{
|
|
Strings = a.NativeArray,
|
|
NumStrings = array.Length
|
|
};
|
|
|
|
return a;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
foreach ( var x in NativeStrings )
|
|
Marshal.FreeHGlobal( x );
|
|
|
|
Marshal.FreeHGlobal( NativeArray );
|
|
}
|
|
}
|
|
} |