Libnodave Kommandozeilenausgaben verhindern

Waddi

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

ich bin neu in diesem Forum. Habe allerdings schon oft hier Hilfe gefunden.
Ich arbeite an einem c++ Projekt, das die Libnodave Bibliothek beinhaltet und zwar baue ich Verbindungen zu mehreren S7 - 1200ern auf. Das ganze Programm läuft auch soweit, allerdings habe ich beim Verbinden zu den SPSen bzw. beim Öffnen des Sockets eine Ausgabe in der Kommandozeile, die ich gerne weg hätte, da mein Ziel eine GUI ist ohne zusätzlichen Aufruf der CMD.

openSocketw.c: bind Socket error: No error

Ich vermute, das diese Ausgabe beim linken des Programms mit in den Code kommt und daher wollte ich die libnodave.lib wohl ändern.
Liege ich mit meiner Vermutung richtig? Wenn Ja, wie kann ich die *.lib ändern. Oder wie kann ich die Ausgabe verhindern?

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja jetzt habe ich das ausprobiert, aber ohne Erfolg. Eventuell habe ich es auch falsch angewendet.
Wo genau sollte ich diese Funktion denn wohl aufrufen. Ich habe sie in meiner Klassenmethode zum Verbinden vor dem openSocket aufgerufen.
Habe nun verscuht mit daveGetDebug den Status des Debugs zu bekommen und der gibt mir 0 wieder. Ich kann den Status auch verändern, aber
die Ausgabe habe ich noch nicht weg.
 
Zuletzt bearbeitet:
Hab mal im Quellcode geschaut, ja diese Ausgabe lässt sich nicht abschalten.

Compilier einfach die libnodave.dll neu, und ersetzte die Funktionen in der log2.h durch leere. Dann ist die Ausgabe weg!
 
Kannst du mir kurz erkären wie ich die dll kompilieren muss? Dann muss ich nicht erst wieder suchen.
Danke
 
Bei libnodave ist ein makefile dabei, glaube makefile.vc, dies musst du noch auf deine pfade anpassen. Dann solltest du in der Visual Studio Eingabeaufforderung libnodave mit "make -f makefile.vc" compilieren können.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke,
nächstes Problem ich verwende CodeBlocks :D
Aber ich werde es einfach mal weiter versuchen.
Habe hier im Forum vom August ein ähnliches Problem entdeckt, da werde
ich mich jetzt noch ein wenig mit beschäftigen

EDIT:
Habe mir nu MVSC++ 6.0 besorgt. Mal schauen ob ich das nu hinbekomme
 
Zuletzt bearbeitet:
Ich mach nicht viel unter Windows.
Unter Linux würde man einfach die Ausgaben nach /dev/null umleiten.
Fertig.

Soll angeblich auch schon bei DOS funktioniert haben, wenn auch
dabei die Mülldatei anders heißt.

Eventuell habe ich aber das eigentliche Problem nicht verstanden...
 
Das geht schon, auch unter Windows, aber wenn man selbst ein Konsolenprogramm erzeugen will, und die Ausgaben der Dlls weg haben will ist dies so nicht möglich!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das geht schon, auch unter Windows, aber wenn man selbst ein Konsolenprogramm erzeugen will, und die Ausgaben der Dlls weg haben will ist dies so nicht möglich!

Da magst Du Recht haben. Ich hatte das nur so verstanden dass der TO nicht
will, das sich eine Konsole selbsttätig "öffnet".
 
Ich verwende nun MVSC++ 6.0 und finde keinen Pfad für die SDKPATH. Ausserdem habe ich noch nicht ganz verstanden wie ich diese Datei makefile.vc aufrufen soll. Wenn ich das mit vcwinmake.bat machen soll, dann weiß ich auch noch nicht was ich da einstellen muss.
Könntest du da noch was zu sagen? ;) Bitte
 
Ich verwende nun MVSC++ 6.0 und finde keinen Pfad für die SDKPATH. Ausserdem habe ich noch nicht ganz verstanden wie ich diese Datei makefile.vc aufrufen soll. Wenn ich das mit vcwinmake.bat machen soll, dann weiß ich auch noch nicht was ich da einstellen muss.
Könntest du da noch was zu sagen? ;) Bitte

Ich compiliers dir morgen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verwende nun MVSC++ 6.0 und finde keinen Pfad für die SDKPATH. Ausserdem habe ich noch nicht ganz verstanden wie ich diese Datei makefile.vc aufrufen soll. Wenn ich das mit vcwinmake.bat machen soll, dann weiß ich auch noch nicht was ich da einstellen muss.
Könntest du da noch was zu sagen? ;) Bitte

SDKPATH ist der Installationspfad zur deiner VC Installation.
Bei der deutschen Version des VC6 ist das standardmäßig:

VCPATH=C:\Programme\Microsoft Visual Studio\VC98
SDKPATH=C:\Programme\Microsoft Visual Studio\VC98


Um die Ausgaben komplett abzuschalten brauchst du auch nicht wie Jürgen meinte im Code etwas zu ändern, sondern es reicht eine Ergänzung im Makefile "makefile.vc" in Zeile 21:

CFLAGS= -I"$(VCPATH)\include" -I"$(SDKPATH)\include" -c -DBCCWIN -DDAVE_LITTLE_ENDIAN -TC -DNO_PRINT_CODE

Du musst also nur -DNO_PRINT_CODE an die Zeile anhängen.

Danach ruftst du eine Eingabeaufforderung auf, wechselst in das Verzeichnis in dem die libnodave Quellen liegen, und gibst dort:
nmake -fMAKEFILE.VC

ein. Dann übersetzt er dir die dll und die Test Programme.
Mit
nmake -fMAKEFILE.VC dynamic
kannst du den Übersetzungsvorgang auf die dll beschränken (geht schneller).
 
Um die Ausgaben komplett abzuschalten brauchst du auch nicht wie Jürgen meinte im Code etwas zu ändern, sondern es reicht eine Ergänzung im Makefile "makefile.vc" in Zeile 21:

CFLAGS= -I"$(VCPATH)\include" -I"$(SDKPATH)\include" -c -DBCCWIN -DDAVE_LITTLE_ENDIAN -TC -DNO_PRINT_CODE

Hab Ich jetzt auch gesehen... Konnte von unterwegs das File nicht öffnen...
 
Super. Vielen Dank. Und für diese selbsterklärenden Dinge habe ich gestern einen ganzen Tag verschenkt. Grausam ist die Wahrheit manchmal.
Was ich nu noch nicht hinbekommen habe, ist nur die *.dll mittels
. . . dynamic zu erstellen. In der *.bat erkennt er wenn ich dynamic mit rein schreibe das /f nicht mehr. Mh.
Aber Mission "Libnodave Kommandozeilenausgabe verhindern" geglückt.
Danke an Jochen und Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also Ich hab meine version der libnodave.dll nun angepasst, so das die Ausgabe von der Meldung nur kommt, wenn daveDebugOpen da ist.

Auch habe Ich noch ein paar printf in setportw durch LOG2 ersetzt, so das das setzen von NO_PRINT_CODE auch den gewünschten Effekt hat!

Download unter:
http://siemensplctoolboxlib.codeplex.com
 
Bingo

Hallo,

Waddi schrieb:
Und für diese selbsterklärenden Dinge habe ich gestern einen ganzen Tag verschenkt. Grausam ist die Wahrheit manchmal.

Da hast Du recht. Mach Dir vier Kreuze von C3 bis C6, Panzerkreuzer versenkt.
Für den Preis des verschenkten Tages bekommt man auch Produkte für ein Paar Euros mit vernünftiger Dokumentation.

Gruß

Question_mark
 
Zurück
Oben