INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Cluster der Array enthält als Ausgabe-Parameter einer dll



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

06.12.2012, 17:48
Beitrag #1

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
Cluster der Array enthält als Ausgabe-Parameter einer dll
wunderschönen Aben,

Das einbinden der PCAN-BasicAPI.dll in Labview mittel CLFN hab ich zum großen Teil ganz gut hinbekommen nur mit einem Parameter einer Funktion hab ich noch Schwierigkeiten.

Die Funktion wird in der API-Doku wie folgt inform von Quelltext definiert:
Delphi
Code:
class function Read(
    Channel: TPCANHandle;
    var MessageBuffer: TPCANMsg;
    var TimestampBuffer: TPCANTimestamp
    ): TPCANStatus; overload; static;
C#
Code:
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Read")]
public static extern TPCANStatus Read(
    [MarshalAs(UnmanagedType.U1)]
    TPCANHandle Channel,
    out TPCANMsg MessageBuffer,
    ref TPCANTimestamp TimestampBuffer);
C++ / CLR
Code:
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Read")]
static TPCANStatus Read(
    [MarshalAs(UnmanagedType::U1)]
    TPCANHandle Channel,
    TPCANMsg %MessageBuffer,
    TPCANTimestamp %TimestampBuffer);

Der Parameter-Typ TPCANMsg ist wie folgt definiert:
C++
Code:
typedef struct
{
    DWORD ID;
    TPCANMessageType  MSGTYPE;
    BYTE LEN;
    BYTE DATA[8];
} TPCANMsg;
Delphi
Code:
TPCANMsg = record
    ID: Longword;
    MSGTYPE: TPCANMessageType;
    LEN: Byte;
    DATA: array[0..7] of Byte;
end;
C#
Code:
public struct TPCANMsg
{
    public uint ID;
    [MarshalAs(UnmanagedType.U1)]
    public TPCANMessageType MSGTYPE;
    public byte LEN;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
    public byte[] DATA;
}
C++ / CLR
Code:
public value struct TPCANMsg
{
    UInt32 ID;
    [MarshalAs(UnmanagedType.U1)]
    TPCANMessageType MSGTYPE;
    Byte LEN;
    [MarshalAs(UnmanagedType::ByValArray, SizeConst = 8)]
    array<Byte>^ DATA;
}

Darum hab ich mir ein VI gebaut, wie unten zu sehen ist

Der Rückgabewert ist "PCAN_ERROR_OK". Das heißt es müsste Daten im Puffer liegen sonst wäre der Rückgabewert "PCAN_ERROR_QVRCEMPTY"
Iin meinem AugabeCluster: MessageBuffer out werden die richtige ArbitrationID, der richtige Nachrichten-Typ und die richtige Nachrichten-Länge aber der Daten-Array ist immer leer obwohl laut Status Daten-anliegen müssten. Mit anderen fertigen Programmen können diese Daten auch über die selbe Harwarre ausgelesen werden.
Kann mir jemand sagen ab ich bei der Parameter-Definition irgend etwas falsch gemacht habe? Vielen Dank.

mfG.
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
Cluster der Array enthält als Ausgabe-Parameter einer dll - SchwindelInside - 06.12.2012 17:48

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL einbinden, Parameter hinzufügen meb2323 3 7.557 07.03.2020 16:51
Letzter Beitrag: meb2323
  Parameter aus LV DLL hammerheadbene 1 5.103 18.10.2011 14:29
Letzter Beitrag: M@rRy
  array of cluster? THL 3 6.415 01.09.2011 12:11
Letzter Beitrag: BeFu
  Problem Aufruf einer C-DLL mit Array Pointer hcl86 4 7.318 01.05.2009 10:18
Letzter Beitrag: hcl86
  Cluster und 2 Dim Array in DLL pgl_bear 4 5.785 16.03.2009 10:17
Letzter Beitrag: pgl_bear
  struct mit char **Parameter in DLL t4b-1re-2 3 6.495 03.09.2007 12:35
Letzter Beitrag: t4b-1re-2

Gehe zu: