Qt peak can Treiber einbinden

Gast #3066263
Lesenswert?

Hallo, ich möchte mit Qt unter Windows7 den Peak can Treiber einbinden. 
In einem Testprojekt habe ich zunächst die Dateien Pcanbasic.dll sowie 
Pcanbasic.h reinkopiert. Beim Übersetzen des Testprojektes werden 
zahlreiche Fehler angezeigt. Zum Beispiel DWORD wird nicht gefunden.Gibt 
es hier  jemand,der bereits Peak can in Qt nutzt?
Persönliche Seite #3066283
Lesenswert?

qtuser schrieb:
> Zum Beispiel DWORD wird nicht gefunden.

#include <windows.h>

(vor dem #include "pcanbasic.h" einfügen)
das sorgt u.a. für die da üblicherweise verwendeten Typdefinitionen.

Mit Headerdatei und DLL alleine wirst Du allerdings vermutlich nicht 
glücklich, du wirst noch eine Importlibrary (*.lib) benötigen -- die ist 
in pcan-basic.zip auch enthalten.
Persönliche Seite #3066396
Lesenswert?

Die DLL wird vom Compiler (genauer: dem Linker) selbst überhaupt nicht 
angefasst, sondern erst vom fertigen Programm zur Laufzeit.
Damit aber der Linker die Funktionsaufrufe von in der DLL enthaltenen 
Funktionen irgendwie sinnvoll mit Deinem Programm verheiraten kann, ist 
eben jene Importlibrary erforderlich.
Die enthält Funktionsrümpfe, die mit der DLL so verknüpft sind, daß das 
Betriebssystem beim Aufrufen des Programmes die DLL lädt und die 
Funktionen passend umbiegt.

Das bietet Dir den Komfort, so mit der DLL umgehen zu können wie mit 
einer statischen Library, denn die Alternative bestünde darin, daß diese 
Funktionen von Deinem Programm selbst übernommen werden müssten - laden 
der DLL mit LoadLibrary, bestimmen der gewünschten Funktionspointer 
mit GetProcAddress etc.
Gast #3066692
Lesenswert?

Hallo, noch folgendes Problem bezüglich einer Klasse.
Ich möchte in einer anderen Klasse den Konstruktor von der Klasse Can 
ausführen:
1
Can *pCan = new Can;
2
pCan->Can(); --> Der Der Typname ist nicht zulässig !!!

Warum kann der Konstruktor nicht ausgeführt werden ?

can.h Datei:
1
#ifndef CAN_H
2
#define CAN_H
3

4
#include "windows.h"
5
#include "PCANBasic.h"
6

7
class Can
8
{
9
public:
10
  Can();
11
  ~Can();
12

13
private:
14

15
};
16

17
#endif // CAN_H

can.cpp Datei:
1
#include "can.h"
2
#include "windows.h"
3
#include "PCANBasic.h"
4

5
DWORD WINAPI CanThread(LPVOID lpParameter);
6

7
Can::Can()
8
{
9
  unsigned long Identifyer;
10
  CreateThread(NULL,0,CanThread,(LPVOID)INVALID_HANDLE_VALUE,0,&Identifyer);
11
}
12

13
Can::~Can()
14
{
15

16
}
17

18
DWORD WINAPI CanThread(LPVOID lpParameter)
19
{
20
  while(1)
21
  {
22
    TPCANStatus gStatus; 
23
    tagTPCANMsg MessageBuffer;
24

25
    gStatus = CAN_Initialize(PCAN_USBBUS1, PCAN_BAUD_1M);
26

27
    MessageBuffer.MSGTYPE=PCAN_MESSAGE_STANDARD;
28
    MessageBuffer.ID=0x100;
29
    MessageBuffer.LEN=8;
30
    // Fill Date of the CAN Message
31
    for(int i=0; i<8; i++)
32
      MessageBuffer.DATA[i]=i*i;
33

34
    // Send CAN Message to the Device Driver - (Shoot and forget...)
35
    gStatus = CAN_Write(PCAN_USBBUS1,&MessageBuffer);
36

37
    gStatus = CAN_Uninitialize(PCAN_USBBUS1);
38
  }
39
  return 0;
40
}
Gast #3067630
Lesenswert?

Mit dieser Anwendung möchte ich Daten von einem Mikrocomtroller senden 
und auslesen können.Die Daten sollen auch visuell dargestellt werden. 
Dazu benötige ich auch noch ein Grafikelement mit dem ich einen 2D Plot 
darstellen lassen kann. Gibt es hierfür schon was fertiges ? Des 
weiteren benötige ich für CAN eine Art Transportprotokoll. Ich habe 
unter anderem Datensätze von 256Bytes die sicher mit dem PC empfangen 
werden sollen.Einen Anfang habe ich bereits gemacht. Es wird dem 
Mikrocomtroller ein Timer gestartet, der alle 10ms eine CAN Nachricht 
von 8Byte an den PC sendet.Wie könnte diese Implementierung erweitern 
werden, damit eine sichere Übertragung möglich wird?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren