
(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.