GameOverlay translation von C# zu vb.net

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von C.O.D.E.

    GameOverlay translation von C# zu vb.net

    Hallo,

    ich habe einen Code in C# gefunden der über DirectX ein Overlay in einem Spiel anzeigen lässt. Ich startete das Projekt in C# und es funktionierte problemlos. Nun habe ich versucht den Code mittels übersetzer in Vb.net zu Konvertieren und es kommen Fehler wo ich nicht genau weiß wie ich diese beheben soll. Ich hänge mal die funktionierende Program.cs dem Anhang an. (Für das Projekt brauch man das Nuget-Paket GameOverlay.Net)

    Dies ist mein Code den ich in vb.net Übersetzt habe:

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Collections.Generic
    3. Imports GameOverlay.Drawing
    4. Imports GameOverlay.Windows
    5. Imports SharpDX.Direct2D1
    6. Public Class frmMain
    7. Private ReadOnly _window As GraphicsWindow
    8. Private ReadOnly _graphics As Graphics
    9. Private ReadOnly _brushes As Dictionary(Of String, SolidBrush)
    10. Private ReadOnly _fonts As Dictionary(Of String, Font)
    11. Private ReadOnly _images As Dictionary(Of String, GameOverlay.Drawing.Image)
    12. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    13. End Sub
    14. Public Sub GraphicsWindowTest()
    15. _brushes = New Dictionary(Of String, SolidBrush)()
    16. _fonts = New Dictionary(Of String, Font)()
    17. _images = New Dictionary(Of String, GameOverlay.Drawing.Image)()
    18. _graphics = New Graphics() With {
    19. .MeasureFPS = True,
    20. .PerPrimitiveAntiAliasing = True,
    21. .TextAntiAliasing = True,
    22. .UseMultiThreadedFactories = False,
    23. .VSync = False,
    24. .WindowHandle = IntPtr.Zero
    25. }
    26. _window = New GraphicsWindow(_graphics) With {
    27. .IsTopmost = True,
    28. .IsVisible = True,
    29. .FPS = 30,
    30. .X = 0,
    31. .Y = 0,
    32. .Width = 200,
    33. .Height = 25
    34. }
    35. _window.SetupGraphics += _window_SetupGraphics()
    36. _window.DestroyGraphics += _window_DestroyGraphics()
    37. _window.DrawGraphics += _window_DrawGraphics()
    38. End Sub
    39. Class SurroundingClass
    40. Protected Overrides Sub Finalize()
    41. End Sub
    42. Public Sub Run()
    43. _window.Create()
    44. Console.WriteLine(_window.Handle.ToString("X"))
    45. End Sub
    46. Public Sub Join()
    47. _window.Join()
    48. End Sub
    49. Public Sub [Stop]()
    50. _window.Dispose()
    51. _graphics.Dispose()
    52. End Sub
    53. Public Sub ReCreate()
    54. _window.Recreate()
    55. End Sub
    56. End Class
    57. Private Sub _window_SetupGraphics(ByVal sender As Object, ByVal e As SetupGraphicsEventArgs)
    58. Dim gfx = e.Graphics
    59. _brushes("black") = gfx.CreateSolidBrush(0, 0, 0)
    60. _brushes("white") = gfx.CreateSolidBrush(255, 255, 255)
    61. _brushes("background") = gfx.CreateSolidBrush(0, &H27, &H31, 255.0F * 0.8F)
    62. Console.WriteLine(_window.Handle.ToString("X"))
    63. If e.RecreateResources Then Return
    64. _fonts.Add("arial", gfx.CreateFont("Arial", 12))
    65. End Sub
    66. Private Sub _window_DestroyGraphics(ByVal sender As Object, ByVal e As DestroyGraphicsEventArgs)
    67. For Each pair In _brushes
    68. pair.Value.Dispose()
    69. Next
    70. For Each pair In _fonts
    71. pair.Value.Dispose()
    72. Next
    73. For Each pair In _images
    74. pair.Value.Dispose()
    75. Next
    76. End Sub
    77. Private Sub _window_DrawGraphics(ByVal sender As Object, ByVal e As DrawGraphicsEventArgs)
    78. Dim gfx = e.Graphics
    79. gfx.ClearScene(_brushes("background"))
    80. gfx.DrawText(_fonts("arial"), 15, _brushes("white"), 5, 5, $"677: 70/70")
    81. Dim device = TryCast(gfx.GetRenderTarget(), WindowRenderTarget)
    82. Dim factory = gfx.GetFactory()
    83. Dim geometry = New PathGeometry(factory)
    84. Dim sink = geometry.Open()
    85. sink.SetFillMode(FillMode.Winding)
    86. sink.BeginFigure(New SharpDX.Mathematics.Interop.RawVector2(200, 200), FigureBegin.Filled)
    87. sink.AddLine(New SharpDX.Mathematics.Interop.RawVector2(300, 200))
    88. sink.AddArc(New ArcSegment() With {
    89. .ArcSize = ArcSize.Small,
    90. .Point = New SharpDX.Mathematics.Interop.RawVector2(300, 300),
    91. .RotationAngle = 0.0F,
    92. .Size = New SharpDX.Size2F(16.0F, 16.0F),
    93. .SweepDirection = SweepDirection.Clockwise
    94. })
    95. sink.AddLine(New SharpDX.Mathematics.Interop.RawVector2(200, 300))
    96. sink.AddArc(New ArcSegment() With {
    97. .ArcSize = ArcSize.Small,
    98. .Point = New SharpDX.Mathematics.Interop.RawVector2(200, 200),
    99. .RotationAngle = 0.0F,
    100. .Size = New SharpDX.Size2F(16.0F, 16.0F),
    101. .SweepDirection = SweepDirection.Clockwise
    102. })
    103. sink.EndFigure(FigureEnd.Open)
    104. sink.Close()
    105. sink.Dispose()
    106. Dim options = New LayerParameters() With {
    107. .GeometricMask = geometry
    108. }
    109. Dim layer = New Layer(device, New SharpDX.Size2F(gfx.Width, gfx.Height))
    110. device.PushLayer(options, layer)
    111. gfx.FillRectangle(_brushes("white"), 100, 100, 400, 400)
    112. device.PopLayer()
    113. layer.Dispose()
    114. geometry.Dispose()
    115. End Sub
    116. End Class



    Als Fehler kommen:
    Fehler BC30064 'ReadOnly-Variable kann nicht das Ziel einer Zuweisung sein. Ark.Auto.PlayerCount C:\Users\XXX\source\repos\Ark.Auto.PlayerCount\Ark.Auto.PlayerCount\frmMain.vb 20 Aktiv
    Und
    Fehler BC32022 "Public Event SetupGraphics As EventHandler(Of SetupGraphicsEventArgs)" ist ein Ereignis und kann nicht direkt aufgerufen werden. Verwenden Sie eine RaiseEvent-Anweisung, um ein Ereignis aufzurufen. Ark.Auto.PlayerCount C:\Users\XXX\source\repos\Ark.Auto.PlayerCount\Ark.Auto.PlayerCount\frmMain.vb 40 Aktiv

    Ich hoffe jemand kann mir helfen. Evetuell ja jemand der sich ein wenig mit C# auskennt.

    Liebe grüße,
    Daniel

    *Topic verschoben*
    Dateien
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Folge den Fehlermeldungen.

    VB.NET-Quellcode

    1. Private ReadOnly _brushes As Dictionary(Of String, SolidBrush)
    2. '[…]
    3. Public Sub GraphicsWindowTest()
    4. _brushes = New Dictionary(Of String, SolidBrush)()
    Du deklarierst _brushes als ReadOnly, aber willst der Variable was außerhalb des Konstruktors zuweisen. Klar wird da gemeckert.

    VB.NET-Quellcode

    1. _window.SetupGraphics += _window_SetupGraphics()
    Das ist C#-Syntax, die die Konverter immer wieder falsch machen. Da müsstest Du mit AddHandler arbeiten:

    VB.NET-Quellcode

    1. AddHandler _window.SetupGraphics, AddressOf _window_SetupGraphics

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @C.O.D.E Nutze dazu den IlSpy.
    Öffne das Originalprojekt im Studio,
    öffne ein neues Projekt in VB.
    Transferiere die Formen und UserControls per C&P von cs nach vb, generiere die Eventhandler inm Designer und fülle sie mit dem Code aus dem IlSpy aus.
    (fast) feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für eure Tipps, probiere ich direkt aus und editiere sie hier rein. :)

    @VaporiZed Dadurch konnte ich wirklich viele Fehler beheben und es verbleieben nur noch 6 Stk mit dem gleichen ursprung.


    Fehler BC30469 Der Verweis auf einen nicht freigegebenen Member erfordert einen Objektverweis. Ark.Auto.PlayerCount C:\Users\XXX\source\repos\Ark.Auto.PlayerCount\Ark.Auto.PlayerCount\frmMain.vb 53 Aktiv

    Wäre cool wenn mir da jemand noch mal eine richtung geben könnte.

    Habt einen schönen Mittwoch!
    Bilder
    • 2021-09-29_152312.png

      47,35 kB, 1.194×686, 80 mal angesehen
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „C.O.D.E“ ()

    C.O.D.E schrieb:

    erfordert einen Objektverweis.
    Das ist so was wie:
    Form1.Text vs. Me.Text.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    In surroundingClass ist _window insofern eine Unbekannte, weil es Teil von frmMain ist, nicht von surroundingClass. Geschachtelte Klassen sind aber eh etwas, was ich argwöhnisch betrachte. Und warum heißt das Ding surroundingClass, wenn frmMain die umschließende Klasse ist?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Dieser Konverter macht das ziemlich gut:
    codeconverter.icsharpcode.net/
    Der Teleric ist da nicht so gut.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habe jetzt einiges probiert aber bekomme einfach keine lauffähige Version hin. Wenn ich jetzt starte bekomme ich den Fehler:

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Collections.Generic
    3. Imports GameOverlay.Drawing
    4. Imports GameOverlay.Windows
    5. Imports SharpDX.Direct2D1
    6. Public Class frmMain
    7. Shared _window As GraphicsWindow
    8. Shared _graphics As Graphics
    9. Shared _brushes As Dictionary(Of String, SolidBrush)
    10. Shared _fonts As Dictionary(Of String, Font)
    11. Shared _images As Dictionary(Of String, GameOverlay.Drawing.Image)
    12. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    13. Run()
    14. End Sub
    15. Public Sub GraphicsWindowTest()
    16. _brushes = New Dictionary(Of String, SolidBrush)()
    17. _fonts = New Dictionary(Of String, Font)()
    18. _images = New Dictionary(Of String, GameOverlay.Drawing.Image)()
    19. _graphics = New Graphics() With {
    20. .MeasureFPS = True,
    21. .PerPrimitiveAntiAliasing = True,
    22. .TextAntiAliasing = True,
    23. .UseMultiThreadedFactories = False,
    24. .VSync = False,
    25. .WindowHandle = IntPtr.Zero
    26. }
    27. _window = New GraphicsWindow(_graphics) With {
    28. .IsTopmost = True,
    29. .IsVisible = True,
    30. .FPS = 30,
    31. .X = 0,
    32. .Y = 0,
    33. .Width = 200,
    34. .Height = 25
    35. }
    36. AddHandler _window.SetupGraphics, AddressOf _window_SetupGraphics
    37. AddHandler _window.DestroyGraphics, AddressOf _window_DestroyGraphics
    38. AddHandler _window.DrawGraphics, AddressOf _window_DrawGraphics
    39. End Sub
    40. Protected Overrides Sub Finalize()
    41. '_window.Dispose();
    42. '_graphics.Dispose();
    43. End Sub
    44. Public Sub Run()
    45. _window.Create()
    46. Console.WriteLine(_window.Handle.ToString("X"))
    47. End Sub
    48. Public Sub Join()
    49. _window.Join()
    50. End Sub
    51. Public Sub [Stop]()
    52. _window.Dispose()
    53. _graphics.Dispose()
    54. End Sub
    55. Public Sub ReCreate()
    56. _window.Recreate()
    57. End Sub
    58. Private Sub _window_SetupGraphics(ByVal sender As Object, ByVal e As SetupGraphicsEventArgs)
    59. Dim gfx = e.Graphics
    60. _brushes("black") = gfx.CreateSolidBrush(0, 0, 0)
    61. _brushes("white") = gfx.CreateSolidBrush(255, 255, 255)
    62. _brushes("background") = gfx.CreateSolidBrush(0, &H27, &H31, 255.0F * 0.8F)
    63. Console.WriteLine(_window.Handle.ToString("X"))
    64. If e.RecreateResources Then Return
    65. _fonts.Add("arial", gfx.CreateFont("Arial", 12))
    66. End Sub
    67. Private Sub _window_DestroyGraphics(ByVal sender As Object, ByVal e As DestroyGraphicsEventArgs)
    68. For Each pair In _brushes
    69. pair.Value.Dispose()
    70. Next
    71. For Each pair In _fonts
    72. pair.Value.Dispose()
    73. Next
    74. For Each pair In _images
    75. pair.Value.Dispose()
    76. Next
    77. End Sub
    78. Private Sub _window_DrawGraphics(ByVal sender As Object, ByVal e As DrawGraphicsEventArgs)
    79. Dim gfx = e.Graphics
    80. gfx.ClearScene(_brushes("background"))
    81. gfx.DrawText(_fonts("arial"), 15, _brushes("white"), 5, 5, $"677: 70/70")
    82. Dim device = TryCast(gfx.GetRenderTarget(), WindowRenderTarget)
    83. Dim factory = gfx.GetFactory()
    84. Dim geometry = New PathGeometry(factory)
    85. Dim sink = geometry.Open()
    86. sink.SetFillMode(FillMode.Winding)
    87. sink.BeginFigure(New SharpDX.Mathematics.Interop.RawVector2(200, 200), FigureBegin.Filled)
    88. sink.AddLine(New SharpDX.Mathematics.Interop.RawVector2(300, 200))
    89. sink.AddArc(New ArcSegment() With {
    90. .ArcSize = ArcSize.Small,
    91. .Point = New SharpDX.Mathematics.Interop.RawVector2(300, 300),
    92. .RotationAngle = 0.0F,
    93. .Size = New SharpDX.Size2F(16.0F, 16.0F),
    94. .SweepDirection = SweepDirection.Clockwise
    95. })
    96. sink.AddLine(New SharpDX.Mathematics.Interop.RawVector2(200, 300))
    97. sink.AddArc(New ArcSegment() With {
    98. .ArcSize = ArcSize.Small,
    99. .Point = New SharpDX.Mathematics.Interop.RawVector2(200, 200),
    100. .RotationAngle = 0.0F,
    101. .Size = New SharpDX.Size2F(16.0F, 16.0F),
    102. .SweepDirection = SweepDirection.Clockwise
    103. })
    104. sink.EndFigure(FigureEnd.Open)
    105. sink.Close()
    106. sink.Dispose()
    107. Dim options = New LayerParameters() With {
    108. .GeometricMask = geometry
    109. }
    110. Dim layer = New Layer(device, New SharpDX.Size2F(gfx.Width, gfx.Height))
    111. device.PushLayer(options, layer)
    112. gfx.FillRectangle(_brushes("white"), 100, 100, 400, 400)
    113. device.PopLayer()
    114. layer.Dispose()
    115. geometry.Dispose()
    116. End Sub
    117. End Class
    Bilder
    • 2021-09-29_221140.png

      59,54 kB, 1.310×877, 78 mal angesehen
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!
    Die Ist-Codereihenfolge:

    VB.NET-Quellcode

    1. Shared _window As GraphicsWindow
    2. '[…]
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Run()
    5. End Sub
    6. '[…]
    7. Public Sub Run()
    8. _window.Create()
    9. Console.WriteLine(_window.Handle.ToString("X"))
    10. End Sub

    _window ist also erstmal gar nix und soll dann irgendwas machen. Das geht nunmal nicht.
    Die einzige Stelle, an der Du aus _window was machst (nämlich mittels new eine echte Objektinstanz erstellen, die dann auch was kann bzw. mit der man was machen kann, z.B. deren Create-Methode aufrufen), ist in der Sub GraphicsWindowTest. Aber die rufst Du nicht auf.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.