Forum: PC-Programmierung Qt peak can Treiber einbinden


von qtuser (Gast)


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?

von Rufus Τ. F. (rufus) Benutzerseite


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.

von qtuser (Gast)


Lesenswert?

Hallo Rufus, vielen Dank für deine Antwort. Warum muss die DLL Datei 
sowie die LIB Datei eingebunden werden ? Ich dachte es würde nur die 
Headerdatei und die DLL Datein genügen.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von QtUser (Gast)


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
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

QtUser schrieb:
> Ich möchte in einer anderen Klasse den Konstruktor von der Klasse Can
> ausführen:
> Can *pCan = new Can;
> pCan->Can(); --> Der Der Typname ist nicht zulässig !!!

Besorg Dir ein C++-Buch.

Der Konstruktor wird NIE explizit aufgerufen, das erledigt der Aufruf 
von new bereits für Dich.

von Philipp G. (flashmaster)


Lesenswert?

Was für eine Anwendung schreibst du denn mit QT und diesem PCAN Treiber?

von qtuser (Gast)


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?

von qtuser (Gast)


Lesenswert?

Für eine  2D Plot könnte ich qwt nutzen.Wie integriert man qwt in visual 
studio?In Visual Studio kann ich bereits qt benutzen.Im Qt Designer 
möchte ich die Gui Elemente von Qwt integrieren buw. nutzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.