C++ Funktion zu VB.Net

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Animix.

    C++ Funktion zu VB.Net

    Servus, ich komm einfach nicht mehr weiter...

    Wie bekomme ich diese Funktion:

    PHP-Quellcode

    1. Vector operator - (const Vector& sub) const { return Vector(x-sub.x,y-sub.y,z-sub.z); }


    in vb hin?

    Mit Public Shared Operator ...? könnte mir da jemand helfen?

    Und 2:

    Am anfang meiner structure in Cpp sieht das so aus:

    PHP-Quellcode

    1. class Vector
    2. {
    3. public:
    4. Vector() { x = y = z = 0.0f; }
    5. Vector(float X, float Y, float Z) { x = X; y = Y; z = Z; }
    6. Vector(const Vector &v) { x = v.x; y = v.y; z = v.z; }
    7. ...
    8. }


    Sollte das in VB so aussehen?

    VB.NET-Quellcode

    1. ublic Class Vector
    2. Public Sub Vector()
    3. X = Y = Z = 0.0F
    4. End Sub
    5. Public Sub Vector(ByVal xf As Single, ByVal yf As Single, ByVal zf As Single)
    6. X = xf
    7. Y = yf
    8. Z = zf
    9. End Sub
    10. Public Sub Vector(ByVal v As Vector)
    11. X = v.X
    12. Y = v.Y
    13. Z = v.Z
    14. End Sub


    oder müssen die ganzen Sub's Public Sub New heißen ?(
    ich versuch dir jetzt mal mit meinem kleinen cpp kentnissen zuhelfen ... hoffe dass das gleich alles so stimmt

    VB.NET-Quellcode

    1. Public Sub Vector()
    2. X = Y = Z = 0.0F
    3. End Sub

    Also 1. das "f" was in cpp ja für einen Float steht gibts in vb nich.


    VB.NET-Quellcode

    1. Public Sub Vector(ByVal xf As Single, ByVal yf As Single, ByVal zf As Single)
    2. X = xf
    3. Y = yf
    4. Z = zf
    5. End Sub

    wenn ich mir deinen Cpp-Code so ansehe willst du hier eher Float übergeben also wird das mit dem ByVal * As Single nicht hinhauen


    VB.NET-Quellcode

    1. Public Sub Vector(ByVal v As Vector)
    2. X = v.X
    3. Y = v.Y
    4. Z = v.Z
    5. End Sub


    hier solltest du die punkte wegnehmen weil das nisch göht ;) am besten einfach n _ nehmen

    das war jetzt alles was ich so entdecken konnte ....

    öhm ne die Sub's bleiben bei Public Sub [name]

    zu dem ersten cpp ausschnitt hab ich aber grade nichts im kopf ... tut mir leid
    @Deph7: Bis auf das mit dem F alles falsch... Wobei das F bei der Deklaration optional ist aber bei Parameterunterscheidung sogar Pflicht ist.

    Ja erstmal musst du alles in Sub New(...) umbenennen in c++ und C# werden Konstruktoren mit dem Namen der Klasse angegeben.
    Die Punkte lässt du mal schön da die sind so richtig.

    Und für den - Operator:

    Quellcode

    1. Public Shared Operator -(ByVal vector1 As Vector, ByVal vector2 As Vector) As Vector
    2. Return New Vector(vector1.x - vector2.x, vector1.y- vector2.y,vector1.z - vector2.z)
    3. End Operator


    Single ist wenn du von Float in c++ ausgehst hier schon ganz richtig.
    Soweit ich weiß hat nikeee13 im Showroom schon mal eine umfangreiche Bibliothek für die Vektorenberechnung veröffentlicht. Vielleicht kannst du dir diese mal anschauen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „chrixko“ ()

    Ja, die Konstruktoren haben in C++ / C# den Namen der Klasse.
    In VB sieht das so aus:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Vector
    2. Private x As Single
    3. Private z As Single
    4. Private y As Single
    5. Public Sub New()
    6. x = Y = Z = 0.0F
    7. End Sub
    8. Public Sub New(ByVal xf As Single, ByVal yf As Single, ByVal zf As Single)
    9. x = xf
    10. y = yf
    11. z = zf
    12. End Sub
    13. Public Sub New(ByVal v As Vector)
    14. x = v.x
    15. y = v.y
    16. z = v.z
    17. End Sub
    18. End Class

    Ich würde aber in jedem Falle Double statt Float nehmen.
    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!

    VB.NET-Quellcode

    1. Public Sub New(ByVal v As Vector)
    2. x = v.x
    3. y = v.y
    4. z = v.z
    5. End Sub


    Dürfte nicht funktionieren weil die Koordinaten Variablen als Private deklariert hast und sie somit nicht Public verfügbar sind im Klassennamespace.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim v1 As New Vector
    3. Dim v2 As New Vector(1, 2, 3)
    4. End Sub

    Getestet, macht er anstandslos.
    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!

    VB.NET-Quellcode

    1. Public Sub New()
    2. x = Y = Z = 0.0F
    3. End Sub

    ->

    VB.NET-Quellcode

    1. Public Sub New()
    2. x = 0.0f
    3. Y = 0.0f
    4. Z = 0.0F
    5. End Sub

    Ansonsten würde es zwar stimmen, ist aber mehr oder weniger Zufall...xD:

    Quellcode

    1. X = 0.0f 'Z = 0 ? -> True Cast in Int-> 1... 1 = Y ? 1 <> 0-> False Cast in Float-> 0
    2. Y = 0.0f 'vordefiniert
    3. Z = 0.0f'vordefiniert

    Y und Z wären nur 0, weil sie mit diesen Werten Initialisiert werden, nicht weil man es hier festgelegt hat, Nur X bekommt 0 über einen unendlichen Umweg zugewiesen^^

    Achso kann eine Klasse innerhalb der eigenen Klasse auf die Variablen zugreifen, das wusste ich nicht.

    Hätte ich auch nicht gedacht^^ Müssten die dann nicht Protected sein?!
    Naja Egal...

    Man sollte sowieso Properties machen, ist schöner ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---