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 

Dieses Thema hat akzeptierte Lösungen:

PeakCAN-BasicAPI.dll in LV einbinden



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!

14.11.2012, 22:36 (Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2012 22:39 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.317
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: PeakCAN-BasicAPI.dll in LV einbinden

Akzeptierte Lösung

(14.11.2012 17:50 )SchwindelInside schrieb:  wunderschönen Abend,

einen PeakCAN-USB-Dongle möchte ich über die PCAN-BasicAPI.dll aus LabView ansprechen. Zum Initializieren eines USB-Kanals rufe die Funktion CAN-Initialize der dll auf und stelle die Parameter entsprechend der API-Doku ein.:

C++:
Code:
TPCANStatus __stdcall CAN_Initialize(
        TPCANHandle Channel,
        TPCANBaudrate Btr0Btr1,
        TPCANType HwType = 0,
        DWORD IOPort = 0,
        WORD Interrupt = 0
);
Wobei die letzten drei Parameter optional sind und bei USB nicht verwendet werden.

Delphi:
Code:
class function Initialize(
    Channel: TPCANHandle;
    Btr0Btr1: TPCANBaudrate
    ): TPCANStatus; overload; static;

Dabei erscheint am Ausgangs-Fehler-Cluster immer der Fehelercode x5ED bzw. d1517. Ich verwende die Standart WinAPi-Aufrufkonvention. Wenn ich die Fehlerprüfung der dll ausschalte stürtzt mir LabView ab. Prof. Google konnte mir zu diesem Fehlercode auch nicht viel sagen, außer dass es möglicherweise irgendwie mit der WinAPI zusammen hängt



Kann mir bitte jemand sagen wie dieser Fehler zu stande kommt und wie ich ihn vermeiden kann? Vielen Dank.

schöne Grüße
Stefan

Standard C kennt KEINE optionalen Funktionsparameter und das DLL Interface folgt Standard C Konventionen und nicht C++ oder Delphi Konventionen wo Parameter mit Defaultwerten deklariert werden können. Das bedeutet dass Du doch echt alle 5 Parameter konfigurieren musst und den "optionelen" Parametern exlplizit den Defaultwert zuweisen musst.

Der Umstand dass die Funktion stdcall ist macht eine variable Anzahl Parameter sowieso vollkommen unmöglich, da der Aufrufer die Parameter auf den Stack schiebt, aber die Funktion den Stack anschliessend korrigiert.

Inwiefern die Datentypen korrekt sind kann ich nicht sagen, da die Deklaration von TPCANStatus, TPCANHandle usw. nirgends aus Deinem Post ersichtlich ist.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
RE: PeakCAN-BasicAPI.dll in LV einbinden - rolfk - 14.11.2012 22:36

Gehe zu: