Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: libnodave anfänger sucht hilfe

  1. #1
    Registriert seit
    22.02.2006
    Beiträge
    51
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hi

    hab erst heute mit libnodave angefangen und c++ kann ich auch nicht soooo gut komm aber normalerweise relativ gut klar. Nun hab ich mir folgendes zusammengebastelt:

    Code:
    //---------------------------------------------------------------------------
    
    #pragma hdrstop
    #define BCCWIN
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include "nodavesimple.h"
    //#include "nodave.h"
    #include "setport.h"
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    _daveOSserialType fds;
    daveInterface * di;
    daveConnection * dc;
    int res;
    fds.rfd=setPort("COM1", "9600", 'O');
    fds.wfd=fds.rfd;
    if (fds.rfd > 0) {
    	di = daveNewInterface(fds, "IF1", 0, daveProtoPPI, daveSpeed9k);
    	daveSetTimeout(di,5000000);
    	if (daveInitAdapter(di) == 0) {
    		dc = daveNewConnection(di, 2, 0, 0);
    		if (daveConnectPLC(dc) == 0) {
    			if (daveReadBytes(dc, daveDB, 1, 0, 2, NULL) == 0) {
    				res = daveGetS16(dc);
    			}
    		}
    	}
    }
    getchar();
    }
    //---------------------------------------------------------------------------
    was ich im moment auslese ist mir noch relativ egal (später will ich die zustände der ausgänge und ein paar zählerwerte auslesen) hauptsache es würde mal gehen aber es macht es noch nicht es kommt immer folgendes:

    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes 'setPort' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveNewInterface(_daveOSserialType, char *, int, int, int)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveSetTimeout(_daveInterface *, int)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveInitAdapter(_daveInterface *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveNewConnection(_daveInterface *, int, int, int)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveConnectPLC(_daveConnection *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveReadBytes(_daveConnection *, int, int, int, int, void *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveGetS16(_daveConnection *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
    kann mit den fehlern gar nichts anfangen vllt. kann mir wer von euch helfen? Achja ich nutzte CodeGear c++ noch als Konsolenanwendung später soll es dann noch in ein VCL. Als Verbindung verwende ich eine PPI Schnittstelle mit einer CPU 222 und 9,6kbit/sec (zumindest ist die schnittstelle und das kabel darauf eingestellt).

    mfg

    chris
    Geändert von chrisi01 (12.12.2007 um 21:56 Uhr)
    Zitieren Zitieren libnodave anfänger sucht hilfe  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    müßte

    "COM1", "9600"
    nicht

    Code:
    "COM1", 9600
    heißen?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Registriert seit
    22.02.2006
    Beiträge
    51
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    hi

    nein weil dann sieht er es als int an er erwartet aber einen char *

    fehler ohne ""

    [BCC32 Fehler] File1.cpp(20): E2034 Konvertierung von 'int' nach 'char *' nicht möglich
    [BCC32 Fehler] File1.cpp(20): E2342 Keine Übereinstimmung des Typs beim Parameter 'baud' ('char *' erwartet, 'int' erhalten)
    [BCC32 Warnung] File1.cpp(35): W8004 'res' wurde ein Wert zugewiesen, der nie verwendet wird
    ich weiss die datentypen machen einen wahnsinnig mich auch manchmal

    mfg

    chris

  4. #4
    Registriert seit
    22.02.2006
    Beiträge
    51
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    soviel ich weis in ' ' setzten wenn es einstellig ist z.b. '0' bei mehr stelligen muss es in " " also "9600" (auf char bezogen) und wenn man es als int angeben will dürfen gar keine hochkommas hin. Zumindest geht '9600' auch nicht da meckert er ebenfalls über int zu char konvertierung wie oben

    mfg

    chris

  5. #5
    Registriert seit
    22.02.2006
    Beiträge
    51
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    hi

    also ich geh davon aus du meinst die DIP Schalter von der PPI Schnittstelle richtig? die stehen auf 01000 und die verbindung klappt auch mit dem Testprogramm das bei libnodave dabei ist. Ich kann nur mein eigenes Programm nicht kompilieren.

    mfg

    chris

  6. #6
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    testprogramm läuft? was ist da anners, so im direkten code-vergleich?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #7
    Registriert seit
    22.02.2006
    Beiträge
    51
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    hi

    folgendes:

    das testprogramm liegt schon vorkompiliert (also als exe) vor und funktioniert. Ebenfalls liegt das Testprogramm als Quelltext vor dies lässt sich aber aus dem selben Grund wie mein eigenes Programm nicht kompilieren.

    Hab irgendwo bei google gefunden das der Fehler darauf hindeutet das eine dll datei nicht passt (ist für vc++ gemacht und geht deshalb mit borland nicht man könnte sie mit coff2omf.exe umwandeln aber dies klappt nicht:

    C:\>coff2omf.exe libnodave.dll 1.dll
    COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporat
    ion
    ERROR: COFF error: libnodave.dll
    (coffread.cpp, 1502) : invalid machine type detected


    C:\>

    kann dies sein?

    mfg

    Chris

  8. #8
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Daumen runter

    Ich kenne mich mit den dll-Formaten nicht gut aus. Ich habe die dll früher mal mit Borland-Tools compiliert. Mit dem Ergebnis daß alle anderen Probleme hatten. Borland erzeugt also wohl ein irgendwie eigenes dll-Format. Es scheint mir aber unwahrscheinlich, daß Borland-Tools mit der dll nichts anfangen können, da wahrscheinlich auch alle System-dlls und die Mehrzahl aller dlls von Drittanbietern mit VC++ kompiliert sein werden. Daher sollte kein Umwandeln nötig sein. Möglicherweise mußt du deinen Tools die "richtigen" Namen über das .lib-file bekannt machen?

    Bei Einbinden des Headers ist wichtig:
    1. BCCWIN muß definiert sein.
    2. Libnodave ist C, nicht C++.


    Beispiel:

    #define BCCWIN

    extern "C" {
    #include "nodave.h"
    }
    ...

    Aber das mit dem "extern "C"" sollte eigentlich schon im header file enthalten sein...

  9. #9
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    634
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Die Microsoft-DLL nehmen und mit dem Borland-Tool "IMPLIB" eine für Borland passende Importbibliothek erzeugen.
    Aufruf:
    IMPLIB LibName DLLName
    Kann sein, dass es dann schon funktioniert.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  10. #10
    Registriert seit
    22.02.2006
    Beiträge
    51
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hi

    @Zottel

    hab nun folgendes gemacht und der fehler bleibt:

    Code:
    //---------------------------------------------------------------------------
    
    #pragma hdrstop
    #define BCCWIN
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    extern "C" {
    #include "nodavesimple.h" //wenn ich die nodave.h nehm geht es auch nicht.
    }
    //#include "nodave.h"
    #include "setport.h"
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    _daveOSserialType fds;
    daveInterface * di;
    daveConnection * dc;
    int res;
    char buffer [255];
    fds.rfd=setPort("COM1", "9600", 'O');
    fds.wfd=fds.rfd;
    if (fds.rfd > 0) {
    	di = daveNewInterface(fds, "IF1", 0, daveProtoPPI, daveSpeed9k);
    	daveSetTimeout(di,5000000);
    	if (daveInitAdapter(di) == 0) {
    		dc = daveNewConnection(di, 2, 0, 0);
    		if (daveConnectPLC(dc) == 0) {
    			if (daveReadBytes(dc, daveSysInfo,0,0,20,NULL) == 0) {
    				res = daveGetS16(dc);
    			}
    		}
    	}
    }
    itoa (res, buffer, 255);
    printf(buffer);
    getchar();
    }
    //---------------------------------------------------------------------------
    @Rainer Hönle

    ich hoffe ich hab dich richtig verstanden wenn ja dann passiert folgendes:

    C:\Programme\CodeGear\RAD Studio\5.0\bin>IMPLIB libnodave.lib 1.dll

    Borland Implib Version 3.0.22 Copyright (c) 1991, 2000 Inprise Corporation
    Error : unable to open file

    C:\Programme\CodeGear\RAD Studio\5.0\bin>
    die libnodave.lib hab ich natürlich ins gleiche verzeichniss kopiert (also in das bin verzeichniss)

    edit: jetzt hab ich dich verstanden:

    C:\Programme\CodeGear\RAD Studio\5.0\bin>IMPLIB libnodave.lib libnodave.dll

    Borland Implib Version 3.0.22 Copyright (c) 1991, 2000 Inprise Corporation

    C:\Programme\CodeGear\RAD Studio\5.0\bin>
    hab die dll natürlich auch reinkopieren müssen hab ich vorhin falsch verstanden gehen tut es aber trotzdem nicht muss ich irgendwas wieder irgendwohin zurück kopieren?

    mfg

    chris
    Geändert von chrisi01 (17.12.2007 um 21:11 Uhr)

Ähnliche Themen

  1. Anfänger sucht Hilfe bei CANopen Mastermodul CX1500-M510
    Von wolfi999 im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 26.05.2009, 12:19
  2. anfänger sucht antwort
    Von tigrz im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 03.01.2009, 20:24
  3. Anfänger sucht Hilfe bei AB Programmierung
    Von rantanplan im Forum Sonstige Steuerungen
    Antworten: 7
    Letzter Beitrag: 25.02.2008, 16:56
  4. SCL Anfänger sucht Hilfe!
    Von hans55 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 11.12.2007, 22:48
  5. Anfänger in Sachen abwärtszählen und TP170A sucht kleinen Ti
    Von Anonymous im Forum PC- und Netzwerktechnik
    Antworten: 2
    Letzter Beitrag: 18.02.2004, 12:38

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •