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