From b7171809e25b2ad99cae8f3e8da2b674bf133e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=88=E7=BA=BE?= <100036558+Yuisyuu@users.noreply.github.com> Date: Wed, 15 May 2024 12:45:50 +0800 Subject: [PATCH] fix: Fix some codes --- src/Generation/PredefinedTypeAttribute.cs | 2 +- src/Hosihikari.NativeInterop.csproj | 2 +- src/Import/LibHook.cs | 3 +- src/Import/LibNative.cs | 2 +- src/SymbolHelper.cs | 14 ++--- src/Unmanaged/CppTypeSystem.cs | 66 +++++++++++------------ src/Unmanaged/ICppInstance.cs | 2 +- src/Unmanaged/STL/StdInputStream.cs | 6 +-- src/Unmanaged/STL/StdSharedPtr.cs | 4 +- src/Unmanaged/STL/StdVector.cs | 4 +- src/Unmanaged/UnexploredType.cs | 5 +- 11 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/Generation/PredefinedTypeAttribute.cs b/src/Generation/PredefinedTypeAttribute.cs index e6b45f6..4745f8a 100644 --- a/src/Generation/PredefinedTypeAttribute.cs +++ b/src/Generation/PredefinedTypeAttribute.cs @@ -5,5 +5,5 @@ public sealed class PredefinedTypeAttribute : Attribute { public required string TypeName { get; set; } - public bool IgnoreTemplateArgs { get; set; } = false; + public bool IgnoreTemplateArgs { get; set; } } \ No newline at end of file diff --git a/src/Hosihikari.NativeInterop.csproj b/src/Hosihikari.NativeInterop.csproj index 55ab35e..0769a4c 100644 --- a/src/Hosihikari.NativeInterop.csproj +++ b/src/Hosihikari.NativeInterop.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/Import/LibHook.cs b/src/Import/LibHook.cs index 3aedb6f..e9162a9 100644 --- a/src/Import/LibHook.cs +++ b/src/Import/LibHook.cs @@ -12,6 +12,7 @@ public enum HookResult internal static partial class LibHook { private const string LibName = "dobby"; + private const string DlsymLibName = "export"; [LibraryImport(LibName, EntryPoint = "DobbyHook")] public static partial HookResult Hook( @@ -24,6 +25,6 @@ out nint originFunc public static partial HookResult Unhook(nint address); [SupportedOSPlatform("windows")] - [LibraryImport(LibName, EntryPoint = "resolveSymbol", StringMarshalling = StringMarshalling.Utf8)] + [LibraryImport(DlsymLibName, EntryPoint = "resolveSymbol", StringMarshalling = StringMarshalling.Utf8)] public static partial nint ResolveSymbol(string symbol); } \ No newline at end of file diff --git a/src/Import/LibNative.cs b/src/Import/LibNative.cs index 1c1f8ec..2e9ca70 100644 --- a/src/Import/LibNative.cs +++ b/src/Import/LibNative.cs @@ -120,4 +120,4 @@ out void* sbuf public static unsafe partial bool std_istream_read(void* stream, byte* buffer, int length); #endregion -} +} \ No newline at end of file diff --git a/src/SymbolHelper.cs b/src/SymbolHelper.cs index 4174868..12d86b3 100644 --- a/src/SymbolHelper.cs +++ b/src/SymbolHelper.cs @@ -41,7 +41,7 @@ public static bool TryDlsym(string symbolName, out nint address) return true; } - if (!s_symbolTable!.TryQuery(symbolName, out int offset)) + if (!s_symbolTable!.TryQuery(symbolName, out nint offset)) { address = default; return false; @@ -114,12 +114,12 @@ public static bool TryQuerySymbol([NotNullWhen(true)] out string? symbol, Proper public static string QuerySymbol(PropertyInfo fptrProperty) { - if (TryQuerySymbol(out string? symbol, fptrProperty)) + if (!TryQuerySymbol(out string? symbol, fptrProperty)) { - return symbol; + throw new InvalidDataException(); } - throw new InvalidDataException(); + return symbol; } public static bool TryQuerySymbol([NotNullWhen(true)] out string? symbol, MethodInfo method) @@ -152,11 +152,11 @@ public static bool TryQuerySymbol([NotNullWhen(true)] out string? symbol, Delega public static string QuerySymbol(Delegate method) { - if (TryQuerySymbol(out string? symbol, method)) + if (!TryQuerySymbol(out string? symbol, method)) { - return symbol; + throw new InvalidDataException(); } - throw new InvalidDataException(); + return symbol; } } \ No newline at end of file diff --git a/src/Unmanaged/CppTypeSystem.cs b/src/Unmanaged/CppTypeSystem.cs index 484dd1b..482282f 100644 --- a/src/Unmanaged/CppTypeSystem.cs +++ b/src/Unmanaged/CppTypeSystem.cs @@ -1,6 +1,5 @@ using Hosihikari.NativeInterop.Unmanaged.Attributes; using System.Reflection; -using System.Runtime.InteropServices; namespace Hosihikari.NativeInterop.Unmanaged; @@ -60,15 +59,17 @@ public static T As(this ICppInstanceNonGeneric @this, bool releaseSrc = false } public static unsafe void* GetVurtualFunctionPointerByIndex(void* vtable, int index) - => (void*)*((long*)vtable + index); + { + return (void*)*((long*)vtable + index); + } } public interface IOverrideAttributeGeneric { - public abstract int Index { get; } - public abstract int Offset { get; } + public int Index { get; } + public int Offset { get; } - public abstract ulong VTableLength { get; } + public ulong VTableLength { get; } } [AttributeUsage(AttributeTargets.Method)] @@ -80,56 +81,55 @@ public sealed class OverrideAttribute(int virtualMethodIndex) : Attribu public ulong VTableLength => TVtable.VtableLength; } -public unsafe interface INativeVirtualMethodOverrideProvider +public interface INativeVirtualMethodOverrideProvider where TSelf : class, ICppInstance, INativeVirtualMethodOverrideProvider { - private static readonly VtableHandle vtableHandle; + // private static readonly VtableHandle vtableHandle; static INativeVirtualMethodOverrideProvider() { throw new NotImplementedException(); - var query = from method in typeof(TSelf).GetRuntimeMethods() - let attrs = method.GetCustomAttributes(false).ToList() - let overrideAttr = attrs.FirstOrDefault(a => a is IOverrideAttributeGeneric) as IOverrideAttributeGeneric - let unmanagedCallersOnlyAttr = attrs.OfType().FirstOrDefault() - where overrideAttr != null && unmanagedCallersOnlyAttr != null - group (method.MethodHandle.GetFunctionPointer(), overrideAttr.Index, overrideAttr.Offset, overrideAttr.VTableLength) - by (overrideAttr.Offset, overrideAttr.VTableLength) into g - select (g.Key, g.Select(t => (t.Item1, t.Index)).ToArray()); + // var query = from method in typeof(TSelf).GetRuntimeMethods() + // let attrs = method.GetCustomAttributes(false).ToList() + // let overrideAttr = attrs.FirstOrDefault(a => a is IOverrideAttributeGeneric) as IOverrideAttributeGeneric + // let unmanagedCallersOnlyAttr = attrs.OfType().FirstOrDefault() + // where overrideAttr != null && unmanagedCallersOnlyAttr != null + // group (method.MethodHandle.GetFunctionPointer(), overrideAttr.Index, overrideAttr.Offset, overrideAttr.VTableLength) + // by (overrideAttr.Offset, overrideAttr.VTableLength) into g + // select (g.Key, g.Select(t => (t.Item1, t.Index)).ToArray()); - vtableHandle = new(query); + // vtableHandle = new(query); } } -internal unsafe struct VTable -{ - public int offset; - public void* ptr; -} +// internal unsafe struct VTable +// { +// public int offset; +// public void* ptr; +// } -internal unsafe class VtableHandle +internal class VtableHandle { - VTable[] vtables; + // VTable[] vtables; public VtableHandle(IEnumerable<((int offset, ulong vtableLength), (nint ptr, int index)[])> values) { throw new NotImplementedException(); - List list = []; + // List list = []; - foreach (var ((offset, vtblLength), ptrs) in values) - { - var vtblPtr = NativeAlloc.NewArray(vtblLength); - for (int i = 0; i < (int)vtblLength; ++i) - { - vtblPtr[i] = ptrs[i].ptr; - } - } + // foreach (var ((offset, vtblLength), ptrs) in values) + // { + // var vtblPtr = NativeAlloc.NewArray(vtblLength); + // for (int i = 0; i < (int)vtblLength; ++i) + // { + // vtblPtr[i] = ptrs[i].ptr; + // } + // } } ~VtableHandle() { - } } \ No newline at end of file diff --git a/src/Unmanaged/ICppInstance.cs b/src/Unmanaged/ICppInstance.cs index ac4680a..78fe78d 100644 --- a/src/Unmanaged/ICppInstance.cs +++ b/src/Unmanaged/ICppInstance.cs @@ -30,7 +30,7 @@ public interface ICppInstanceNonGeneric : IDisposable public interface ICppInstance : ICppInstanceNonGeneric where TSelf : class, ICppInstance { - public new static abstract TSelf ConstructInstance(nint ptr, bool owns, bool ownsMemory); + public static new abstract TSelf ConstructInstance(nint ptr, bool owns, bool ownsMemory); /// /// noexcept diff --git a/src/Unmanaged/STL/StdInputStream.cs b/src/Unmanaged/STL/StdInputStream.cs index 75341ec..3f6d220 100644 --- a/src/Unmanaged/STL/StdInputStream.cs +++ b/src/Unmanaged/STL/StdInputStream.cs @@ -67,15 +67,15 @@ public byte[] ReadToEnd() byte* buffer = stackalloc byte[bufferSize]; while (LibNative.std_istream_read(_pointer, buffer, bufferSize)) { - writer.Write(new ReadOnlySpan(buffer, bufferSize).ToArray()); + writer.Write([..new ReadOnlySpan(buffer, bufferSize)]); NativeMemory.Clear(buffer, bufferSize); } - byte[] data = new ReadOnlySpan(buffer, bufferSize).ToArray(); + byte[] data = [..new ReadOnlySpan(buffer, bufferSize)]; int end = data.AsSpan().IndexOf((byte)0); if (end > 0) { - data = data.AsSpan(0, end).ToArray(); + data = [..data.AsSpan(0, end)]; } writer.Write(data); diff --git a/src/Unmanaged/STL/StdSharedPtr.cs b/src/Unmanaged/STL/StdSharedPtr.cs index 6a1446c..0103944 100644 --- a/src/Unmanaged/STL/StdSharedPtr.cs +++ b/src/Unmanaged/STL/StdSharedPtr.cs @@ -1,13 +1,11 @@ using Hosihikari.NativeInterop.Generation; using System.Runtime.InteropServices; -using System.Runtime.Versioning; -using System.Text.RegularExpressions; namespace Hosihikari.NativeInterop.Unmanaged.STL; [PredefinedType(TypeName = "class std::shared_ptr", IgnoreTemplateArgs = true)] [StructLayout(LayoutKind.Sequential)] -public unsafe partial struct StdSharedPtr +public unsafe struct StdSharedPtr { public void* ptr; public void* ctr; diff --git a/src/Unmanaged/STL/StdVector.cs b/src/Unmanaged/STL/StdVector.cs index a88ba18..42f8c7b 100644 --- a/src/Unmanaged/STL/StdVector.cs +++ b/src/Unmanaged/STL/StdVector.cs @@ -2,14 +2,12 @@ using Hosihikari.NativeInterop.Import; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using System.Runtime.Versioning; -using System.Text.RegularExpressions; namespace Hosihikari.NativeInterop.Unmanaged.STL; [PredefinedType(TypeName = "class std::vector", IgnoreTemplateArgs = true)] [StructLayout(LayoutKind.Sequential)] -public unsafe partial struct StdVector +public unsafe struct StdVector { public void* begin; diff --git a/src/Unmanaged/UnexploredType.cs b/src/Unmanaged/UnexploredType.cs index 030c985..7dbea1f 100644 --- a/src/Unmanaged/UnexploredType.cs +++ b/src/Unmanaged/UnexploredType.cs @@ -2,5 +2,8 @@ namespace Hosihikari.NativeInterop.Unmanaged; public struct UnexploredType where T : class, ICppInstance { - static UnexploredType() => throw new InvalidOperationException(); + static UnexploredType() + { + throw new InvalidOperationException(); + } } \ No newline at end of file