Problem mit Überladeauflösung

Gulli

Mitglied
Hi, also ich hab mal angefangen mit DirectX.
Hier mein Problem:

C:\...\clsEngine.vb(78): Die Überladungsauflösung ist fehlgeschlagen,da keine zugreifbare "DrawText" für diese Argumente am spezifischsten ist:
"Public Function DrawText(sprite As Microsoft.DirectX.Direct3D.Sprite, text As String, rect As System.Drawing.Rectangle, format As Microsoft.DirectX.Direct3D.DrawTextFormat, color As System.Drawing.Color) As Integer": Nicht am besten zutreffend
"Public Function DrawText(sprite As Microsoft.DirectX.Direct3D.Sprite, text As String, ByRef rect As System.Drawing.Rectangle, format As Microsoft.DirectX.Direct3D.DrawTextFormat, color As System.Drawing.Color) As Integer": Nicht am besten zutreffend

Ich hab da das Gefühl, das VS.NET weiß nicht, ob es sich bei "rect As System.Drawing.Rectangle" für das ByRef und das ByVal entscheiden soll.
Kann mir einer sagen, wie ih das hinbekomme, dass VB.NET das ByVal bzw. das ByRef nimmt?

GreeZ
Gulli
 
Ich programmiere zwar kein VB.NET aber trotzdem..

System.Drawing.Recangle ist doch ein Referenztyp.
Du hast also gar nichts davon, wenn du ihn 'ByRef' übergibst, weil er das sowieso automatisch wird. Wenn du ihn 'ByRef' übergibst muss der Compiler ja 2 Referenzen auflösen..
 
Hi, also ich versteh nicht soganz was du meinst.
Meiner Meinung nach, muss der Compiler hier sich entscheiden, welche Überladung er nimmt. Und weil er das nicht will bzw. kann, givbt er mir einen Fehler. Ich möchte ja nur wissen, wie ich mich für eine von den beiden entscheiden kann.

GreeZ
Gulli
 
Naja, ich meinte folgendes:
Es ist unsinnig diese Methode überhaupt zu überladen da beides den selben Effekt haben wird.

System.Drawing.Recangle ist ein Referenztyp. Wenn du kein 'ByVal' oder 'ByRef' angibst, dann übergibt VB.NET immer 'ByVal'. Wenn der zu übergebende Typ allerdings kein Werttyp ist dann unterscheidet sich VB.NET von vielen anderen Sprachen. Es übergibt hier den Wert der referenz (was eben die Speicheradresse ist). Wenn du diese Adresse nochmals 'ByRef' übergibst, dann ist es eben zusätzlicher Balast, mit aber dem gleichen Ergebnis.
 
Hi, also jetzt verstehe ich das, aber: ich hab die Methode ja nicht geschrieben, sondern die von Mircosoft. Also muss es ja irgentwie gehen, das der Compiler weis, ob ich ByRef oder ByVal benutzen will.

GreeZ
Gulli
 
Tut mir Leid. Mein Fehler. War zwar richtig, was ich gesagt habe allerdings ist System.Drawing.Rectangle kein Referentyp. Es sit eine Struktur, keine Klasse. Hätte vorher nachschauen sollen :)

Vielleicht einfach das Schlüsselwort 'ByVal' vorsetzen?

//EDIT:
Oder zeit mal deinen Code :)
 
Zuletzt bearbeitet:
Hi,

Code:
Dim fntOut As Font
Dim rect As New Rectangle(5, 5 + (20), 0, 0)
fntOut.DrawText(New Sprite(D3DDev), drwText, rect, DrawTextFormat.Top, Color.Blue)
'Die obere Zeile wird unterkringelt
 
Musst du nicht zuerst noch eine Instanz von Font erstellen?
Dann sollte aber eigentlich ein anderer Fehler kommen.. Hast du es vllt nur beim dem hier geposteten Code vergessen?

Code:
Dim fntOut As new Font(D3DDev,new System.Drawing.Font("Arial",20.0f));
 
Hi, ja habe das vergessen, weil die Inztanz wo anders gemacht wurde :).

Code:
Dim fntOut As Font
fntOut = New Font(D3DDev, New Drawing.Font("Arial", 20, FontStyle.Bold))
Dim rect As New Rectangle(5, 5 + (20), 0, 0)
fntOut.DrawText(New Sprite(D3DDev), drwText, rect, DrawTextFormat.Top, Color.Blue)

So ist es bei mir.
PS: Bei VB.NET wäre das ";" ein Fehler.

GreeZ
Gulli
 
Zurück