# Libnodave Kommandozeilenausgaben verhindern



## Waddi (10 Februar 2011)

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ß


----------



## Jochen Kühner (10 Februar 2011)

Schon daveSetDebug(0); probiert?


----------



## Waddi (10 Februar 2011)

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.


----------



## Jochen Kühner (10 Februar 2011)

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!


----------



## Waddi (10 Februar 2011)

Dankeschön.
Dann werde ich mich nu mal damit beschäftigen wie man eine *.dll neu kompiliert


----------



## Jochen Kühner (10 Februar 2011)

Wenns nicht klappt, erinner mich morgen einfach per PN nochmals dran, dann kann Ich dir sie auch neu compilieren, heute geht's nicht (bin auf der Logimat)


----------



## Waddi (10 Februar 2011)

Kannst du mir kurz erkären wie ich die dll kompilieren muss? Dann muss ich nicht erst wieder suchen. 
Danke


----------



## Jochen Kühner (10 Februar 2011)

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.


----------



## Waddi (10 Februar 2011)

Danke,
nächstes Problem ich verwende CodeBlocks 
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


----------



## argv_user (10 Februar 2011)

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...


----------



## Jochen Kühner (10 Februar 2011)

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!


----------



## argv_user (10 Februar 2011)

Jochen Kühner schrieb:


> 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".


----------



## Waddi (10 Februar 2011)

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


----------



## Jochen Kühner (10 Februar 2011)

Waddi schrieb:


> 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...


----------



## Thomas_v2.1 (10 Februar 2011)

Waddi schrieb:


> 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).


----------



## Jochen Kühner (10 Februar 2011)

Thomas_v2.1 schrieb:


> 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...


----------



## Waddi (11 Februar 2011)

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


----------



## Jochen Kühner (11 Februar 2011)

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


----------



## Question_mark (11 Februar 2011)

*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


----------

