| @@ -55,10 +55,28 @@ namespace Tensorflow | |||||
| { | { | ||||
| if(handle is null){ | if(handle is null){ | ||||
| return new byte[0]; | return new byte[0]; | ||||
| } | |||||
| var data = handle.ToArray(); | var data = handle.ToArray(); | ||||
| return data; | return data; | ||||
| } | } | ||||
| public unsafe static byte[] ByteStringPieceFromNativeString(IntPtr handle) | |||||
| { | |||||
| if (handle == IntPtr.Zero) | |||||
| { | |||||
| return new byte[0]; | |||||
| } | |||||
| byte* str_data = (byte*)handle.ToPointer(); | |||||
| List<byte> bytes = new List<byte>(); | |||||
| byte current = 255; | |||||
| while (current != ((byte)'\0')) | |||||
| { | |||||
| current = *(str_data++); | |||||
| bytes.Add(current); | |||||
| } | |||||
| var data = bytes.ToArray(); | |||||
| return data; | |||||
| } | |||||
| [UnmanagedFunctionPointer(CallingConvention.Winapi)] | [UnmanagedFunctionPointer(CallingConvention.Winapi)] | ||||
| public delegate void Deallocator(IntPtr data, IntPtr size, ref DeallocatorArgs args); | public delegate void Deallocator(IntPtr data, IntPtr size, ref DeallocatorArgs args); | ||||