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?
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.
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.
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.
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 | }
|
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.
Was für eine Anwendung schreibst du denn mit QT und diesem PCAN Treiber?
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.