Announcement

Collapse
No announcement yet.

ByteArray un Struktur umkopieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ByteArray un Struktur umkopieren

    Hallo zusammen,
    ich kämpfe schon seit Freitag an einem Problem für das ich in VB.net leider keine Lösung finden kann. Ich verwende eine eine in C++ geschriebene DLL zum Abholen von Daten von einer externen Hardware über einen Echtzeitbus.

    Es gibt in der DLL Funktionen um Lesen und Schreiben von Daten bei der man lediglich eine Adresse, die zu verarbeitende Länge und einen Pointer auf ein Array zu übergeben hat.

    In der Deklaration bin ich wie folgt vorgegangen:
    Code:
    'C++ Deklaration
    'BOOL V32ReadMemory	                                     (int iCCB,                UINT uiMaster,         UINT 	uiAddress,           UINT 	uiOffset,           UINT 	uiLen,          UINT * 	puiError,       void * 	pBuffer	)	
    'VB.net
    Public Declare Function V32ReadMemory Lib "V32.dll" (ByVal iCCB As Int32, ByVal uiMaster As UInt32, ByVal uiAddress As UInt32, ByVal uiOffset As UInt32, ByVal uiLen As UInt32, ByRef uipError As UInt32, ByRef pBuffer As Byte) As Boolean
    Prinzipiell funktioniert das auch ganz wunderbar, allerdings hole ich mir hier eine Datenstruktur herauf welche nicht nur aus 1 Byte Werten besteht. Hierfür hätte ich mir eine Struktur deklariert:

    Code:
        Structure addr_m_t_buff_voltage
            Dim ModulStatus1 As Byte                    '
            Dim ModulStatus2 As Byte                    ' ToDo: 3 Byte Wert in Array zusammenfassen
            Dim ModulStatus3 As Byte                    '
            Dim CosPhi As Byte
            Dim ActPower As Integer
            Dim AbsolutEnergyConsum As Int32
            Dim EnergyConsumSinceReset As Int32
            Dim TrigCalcStatus1 As Byte                 '
            Dim TrigCalcStatus2 As Byte                 ' ToDo: 3 Byte Wert in Array zusammenfassen
            Dim TrigCalcStatus3 As Byte                 '
            Dim TrigCosPhi As Byte
            Dim TrigEnergyConsum As Int32
            Dim TrigErnergyConsumPerShot As Int32
            Dim MaxPower As Int32
            Dim U1 As VoltageChannel
            Dim U2 As VoltageChannel
            Dim U3 As VoltageChannel
        End Structure

    Beim Aufruf meiner Funktion bekomme ich auch bereits die gültigen Werte gelesen. Allerdings scheitere ich jetzt am Umkopieren. (jetzt wär eine Mem. Copy Funktion ein Traum ;-) )

    Habt Ihr einen Tipp / eine Lösung für mich?

    Vielen vielen Dank schon mal!

  • #2
    (jetzt wär eine Mem. Copy Funktion ein Traum ;-)
    Du meinst Alptraum.

    Um irgendein Problem in der .Net Welt mit dem alten unmanaged Zeugs zu umgehen würde ich das ganze in eine C++/CLI Assembly verpacken. Da man dort Zugriff auf den managed sowie den unmanaged heap hat kannst du mit den alten unmanaged C++ mitteln auf deine Dll(und damit auf deine Hardware) zugreifen und die Daten aus dem klassischen struct in eine saubere .Net Datenstruktur kopieren, über eine .Net Schnittstelle veröffentlichen und dann im VB.Net Code konsumieren(und bist dann dort sauber von dem Legacy Dr**k entkoppelt).

    Comment


    • #3
      Sorry für meine späte Antwort - irgendwie hab ich keine E-Mail bekommen und nach verzweifelten Googlen dann eine Lösung gefunden - Ja zu einem Alptraum hat es sich wirklich entwickelt *g*..

      Lösung funktioniert aber stabil - poste sie bei Gelegenheit auch

      Comment

      Working...
      X