libnodave in C++ Klassen zu integrieren

314otr

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich versuche grade die Funktionen von libnodave in C++ Klassen zu integrieren.
Bei verlasen der Funktion s7serial :: initialize() stürzt das Programm ab und es wird das Dialogfeld Berichterstattung von Anwendungsfehlern eingeblendet, in dem man gebeten wird, die Einwilligung dazu zu geben, dass über das Internet ein detaillierter Bericht zu dem Problem an Microsoft übermittelt wird.
[FONT=&quot]So lange die Funktion nicht verlassen wird, ist alles in Ordnung. Wo liegt das problem? Hier eine Kurzversion von dem Progeamm. Ich benutze DEV-CPP unter Window XP.

#include <cstdlib>
#include <iostream>
#include "nodave.h"
#include "setport.h"

using namespace std;

class s7serial
{
public:
s7serial();
int initialize();
private:
_daveOSserialType fds;
};

s7serial::s7serial()
{
};

int s7serial :: initialize()
{
fds.rfd=setPort("COM1","38400",'o');
fds.wfd=fds.rfd;
cout << "Nach verlassen dieser Funktion [/FONT]stürzt das Programm ab[FONT=&quot]"
<< endl
<< "Es erscheint das Dialogfeld Berichterstattung von Anwendungsfehlern"
<< endl;
system("PAUSE");
};

[/FONT]
 
Ich wei' nicht, durch welchen Mechanismus die Meldung an MS ausgeloest wird (Schreiben auf nicht vorhandenen Speicher, Keine Freigabe von Resourcen, Mehrfachbelegung derselben...).
Der Code sieht auf Anhieb "ungefährlich" aus. Passiert das tatsächlich auch mit dieser Minimalversion?
Wenn ja:
[FONT=&quot]1. _daveOSserialType wird abhängig vom Betriebssytem definiert. Ohne Angabe dessen solltest du schon beim Kompilieren die Meldung "fill in waht you need for your OS or API..." (oder so ähnlich) erhalten. Da das nicht so ist, vermute ich, daß du - wie es sein soll - BCCWIN definiert hast. Andernfalls verstünde dein Compiler die Compileranweisung #error nicht....
2. In deinem gezeigten Code ist die einzige von libnodave ausgeführte Aktion die function setport(). Was passiert, wenn du sie nicht ausführst (auskommentierst)? Diese Funktion ist definiert in setportw.c, benutzt nur ein paar Aufrufe des Windows-API um die Parameter der seriellen Schnittstelle einzustellen und hat nicht mehr als 80 Zeilen, die etwas tun. Was passiert, wenn du diese Zeilen dorthin kopierst, wo jetzt der Aufruf von setport() steht? Nachdem du das getan hast: Kannst du alles mit einem Debugger ausführen und schauen, in welcher Zeile das Übel auftritt?

Nachtrag: Ich kenne weder DEV-CPP noch XP sehr gut. Unter Linux wäre ein mögliches Hindernis, daß zur Parametrierung der seriellen Schnittstellen Administratorrechte nötig sein können.






[/FONT]
 
Zuletzt bearbeitet:
Zurück
Oben