mikrocontroller.net

Forum: PC-Programmierung Problem portieren von MKL$ / CVL Funktion nach VB2008


Autor: Dietmar Hohl (dhohl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein herzliches Hallo,
den Profis in VB2005/2008 hier in diesem Forum!

Kurz: Ich bin Dietmar Hohl, arbeite als Konstrukteur im Maschinenbau
in Linz/Österreich und wenn die karge Privatzeit es zulässt arbeite
ich an meinem Hobby - am Magnetmotor.

Nach zahlreichen Grundlagenversuchen die u.a. auf  meiner HP unter
www.magnetmotor.at  veröffentlicht wurden reifte im Februar d.J. die
Erkenntnis sich tiefer mit Grundlagenforschung Betreff Magnetfelder
zu beschäftigen. Wie manche wissen bzw. sich denken können ist das
ein steiniger Weg.

Ohne sauber konstruierte Prüfaufbauten mit denen man "reproduzierbar"
zu möglich, wichtigen Schlüsselerkenntnissen gelangen könnte führt
m.E. kein Weg vorbei.

Im aktuellen Projektaufbau wird aus diesem Grund ein über den USB-Port
gesteuerter CNC-Motorcontroller eingesetzt der über einen Stepper-Motor
eine Linearachse bewegt.

Auf der Linearachse selbst ist angeschossen an einem weiteren USB-Port
ein Zug-/Druckmesser aufgebaut der die jeweils ermittelten Zug-/Druck 
Werte liefern soll.

Ziel der ersten Etappe des Projekts ist es ein Zug-/Druckdiagramm mit
aussagefähigen, gesicherten IST-Daten zu erhalten.

Um den von mir eingesetzten CNC-Motorcontroller aber jedoch korrekt 
ansteuern zu können werden unbedingt Funktionen wie  MKL$ und CVL
benötigt die in älteren DOS-basierenden Basic-Compilern vorhanden
und portiert auf Visual Basic-Versionen VB6.0 unter XP funzen.

Mein Problem ist diese  MKL/CVL-Funktionen von VB6.0 auf
Visual-Basic 2008 (VB2008) zu portierten.

Wer kann mir helfen ?   Danke !

Dietmar Hohl, Linz/Österreich ;-)  d.hohl@magnetmotor.at

--------------------------------------------------------------------
Hier im Anhang zur Begutachtung die in VB6 funktionierenden MKL/CVL 
Funktionen:

' ---------------------( Visual Basic 6.0 )------------------
' MKL, CVL Funktionen
' --------------------------------------------------------------

Option Explicit

Private Declare Sub MoveMemory Lib "Kernel32" Alias "RtlMoveMemory" _
(ByVal Dest As Any, ByVal Source As Any, ByVal Bytes As Long)

Private Declare Sub MoveString Lib "Kernel32" Alias "RtlMoveMemory" _
(Dest As Any, ByVal Source As String, ByVal Bytes As Long)

'-----------------( START )-----------------
Private Sub Command1_Click()
  Dim in0 As String
  Dim in1 As Long
  Dim erg1 As String
  Dim erg2 As Long

  in1 = Val(txtArg1.Text)
  in0 = MKL(in1)
  erg1 = in0
  Label2 = erg1

  erg2 = CVL(erg1)
  Label3 = erg2
  ' ....
End Sub

' -------------( MKL / CVL )----------------
Public Function MKL(ByVal N&) As String
  MKL = Space$(4)
  Call MoveMemory(ByVal MKL, VarPtr(N&), 4)
End Function

Public Function CVL(ByVal S$) As Long
If Len(S$) < 4 Then
  MsgBox ("CVL Error - String too Short")
  Exit Function
End If
  Call MoveString(CVL, S$, 4)
End Function
' -----------------------------------------

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mögen denn MKL und CVL anstellen? Bist Du Dir sicher, daß Du deren 
Verhalten mit RtlMoveMemory nachbilden willst?

Sieh Dir mal das hier an:

http://www.aboutvb.de/khw/artikel/khwmkicvi.htm

Autor: Dietmar Hohl (dhohl)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rufus,

meinen Dank an Dich für den Verweis. Super!
Diese MKL/CVL-Funktionen funzen in VB6 sauber. ;-)

Beim Portieren nach 2008 steigt aber der
Compiler u.a. bei den Funktionen LSet aus.

Die Funktion LSet in VB2008 erlaubt kein
LSet varname1 = varname2 wie in VB6.

VB2008 verhält sich restrektiv.

Im Dateianhang sende ich Dir zur Begutachtung
den VB6 code der nicht nach VB2008 will.

Wer hat eine funktionierende Lösung zu diesem Problem?

Meinen Dank im voraus!

Dietmar Hohl, Linz/Österreich (www.magentmotor.at)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In VB.Net ist LSet eine Stringverarbeitungsfunktion mit zwei Argumenten:
Dim TestString As String = "Left"
Dim lString As String

' Returns "Left      "
lString = LSet(TestString, 10)

' Returns "Le"
lString = LSet(TestString, 2)

' Returns "Left"
lString = LSet(TestString, 4)

Vielleicht hilft Dir ja das hier weiter:

http://msdn.microsoft.com/de-de/library/cc485158(VS.71).aspx

Das beschreibt Probleme bei der Portierung von LSet aus VB6 nach VB.Net.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.