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


von Dietmar H. (dhohl)


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
' -----------------------------------------

von Rufus Τ. F. (rufus) Benutzerseite


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

von Dietmar H. (dhohl)


Angehängte Dateien:

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)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In VB.Net ist LSet eine Stringverarbeitungsfunktion mit zwei Argumenten:
1
Dim TestString As String = "Left"
2
Dim lString As String
3
4
' Returns "Left      "
5
lString = LSet(TestString, 10)
6
7
' Returns "Le"
8
lString = LSet(TestString, 2)
9
10
' Returns "Left"
11
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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.