[Linker Fataler Fehler] Fatal: Unable to open file 'DCLUSR50.BPI'



  • Hi,
    das geht ja schnell. Leere Form läst sich Compilieren und das Programm sieht so aus:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    HANDLE m_hcom=INVALID_HANDLE_VALUE; // Handle für die serielle Schnittstelle
    COMMCONFIG cc;   // Struktur zum lesen/schreiben der COMM Konfiguration
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     // COM1 oeffnen / schliessen
     if (m_hcom == INVALID_HANDLE_VALUE) // ist COM1 inaktiv?
     {
      m_hcom = CreateFile ( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL,
                                  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
      if (m_hcom == INVALID_HANDLE_VALUE)
        Label2->Caption="COM1 konnte nicht geöffnet werden!";
     }
     else // COM1 wieder schliessen
     {
      CloseHandle(m_hcom);
      m_hcom = INVALID_HANDLE_VALUE;
     }
    
     // Ausgabe des Status von COM1
     if (m_hcom != INVALID_HANDLE_VALUE)
     {
      Label1->Caption="COM1 aktiv";
      Label1->Color=clGreen;
      Button1->Caption="deaktivieren";
     }
     else
     {
      Label1->Caption="COM1 inaktiv";
      Label1->Color=clRed;
      Button1->Caption="aktivieren";
     }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     // Timeout Werte setzen, damit ReadFile nicht ewig wartet
     COMMTIMEOUTS CommTO;
     CommTO.WriteTotalTimeoutMultiplier=100; // max 100 ms für ein Zeichen
     CommTO.WriteTotalTimeoutConstant=2000;  // max 2s für alles
     SetCommTimeouts(m_hcom,&CommTO);
    
     // Einen String über die serielle Schnittstelle senden
     char Data[80];
     DWORD BytesWritten;
     strcpy(Data,Edit1->Text.c_str());
     WriteFile(m_hcom,&Data,strlen(Data),&BytesWritten,NULL);
    
     Label2->Caption=(AnsiString(BytesWritten)+" Bytes gesendet");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
     // Mode COM1:1200,E,8,1 emulieren
     DCB dcb;
     char ModeString[]="baud=1200 parity=E data=8 stop=1";
     if (BuildCommDCB(ModeString,&dcb))
     {
        SetCommState(m_hcom,&dcb);
        Label2->Caption="mode COM1: 1200,E,8,1 emuliert";
     }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
     // Timeout Werte setzen, damit ReadFile nicht ewig wartet
     COMMTIMEOUTS CommTO;
     CommTO.ReadIntervalTimeout=100;         // max 100 ms warten auf ein Zeichen
     CommTO.ReadTotalTimeoutMultiplier=100;  // max 100 ms für jedes Zeichen
     CommTO.ReadTotalTimeoutConstant=2000;   // max 2s auf Daten warten
     SetCommTimeouts(m_hcom,&CommTO);
    
     // String empfangen, max 20 Zeichen
     char Data[20]="Leer";
     DWORD BytesRead;
     if (ReadFile(m_hcom,&Data,20,&BytesRead,NULL))
     {
      if (BytesRead>0)Label4->Caption=Data;
      else Label4->Caption="Timeout";
     }
     else
     Label4->Caption="Fehler";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
     // ist ein COMM-Port aktiv?
     if (m_hcom!=INVALID_HANDLE_VALUE)
     {
      DWORD Status=0;  // Register fuer Status der Control Leitungen
    
      if (CheckBoxKontrol->Enabled==true)  // RTS, DTR, BRK steuerbar?
      {
        if (CheckBoxRTS->Checked==true) EscapeCommFunction(m_hcom,SETRTS);
        if (CheckBoxRTS->Checked==false) EscapeCommFunction(m_hcom,CLRRTS);
        if (CheckBoxDTR->Checked==true) EscapeCommFunction(m_hcom,SETDTR);
        if (CheckBoxDTR->Checked==false) EscapeCommFunction(m_hcom,CLRDTR);
        if (CheckBoxBRK->Checked==true) EscapeCommFunction(m_hcom,SETBREAK);
        if (CheckBoxBRK->Checked==false) EscapeCommFunction(m_hcom,CLRBREAK);
      }
      // Zustand der Leitungen CTS, DSR und DCD auslesen
      GetCommModemStatus(m_hcom,&Status);
    
      // CheckBoxen neu setzen
      if (Status & MS_CTS_ON)
         CheckBoxCTS->Checked=false;
      else
         CheckBoxCTS->Checked=true;
    
      if (Status & MS_DSR_ON)
         CheckBoxDSR->Checked=false;
      else
         CheckBoxDSR->Checked=true;
    
      if (Status & 128) // MS_DCD_ON gibts nicht
         CheckBoxDCD->Checked=false;
      else
         CheckBoxDCD->Checked=true;
     }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
      DWORD Size=0;    // Groesse der COMMCONFIG Struktur
    
      // Konfiguration auslesen
      GetCommConfig(m_hcom,&cc,&Size);
    
      // Dialog zur Konfiguration verwenden
      CommConfigDialog("com1",NULL,&cc);
      // Konfiguration aktualisieren
      SetCommConfig(m_hcom,&cc,Size);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
       if(PurgeComm(m_hcom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR))
         Label2->Caption="COM1 zurückgesetzt";
       else
         Label2->Caption="Fehler!";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::CheckBoxKontrolClick(TObject *Sender)
    {
     if (CheckBoxKontrol->Checked==true)
     {
      CheckBoxRTS->Enabled=true;
      CheckBoxDTR->Enabled=true;
      CheckBoxBRK->Enabled=true;
     }
     else
     {
      CheckBoxRTS->Enabled=false;
      CheckBoxDTR->Enabled=false;
      CheckBoxBRK->Enabled=false;
     }
    }
    //---------------------------------------------------------------------------
    

    Gruß
    Kohli

    bitte CodeTags verwenden

    Ok, werde ich machen.



  • DCLUSR50.BPI deutet auf eine Version 5 hin. Hast du das Projekt mit einer anderen Version geöffnet ?



  • Die Version die ich habe ist eine 5.0 (Build 12.34) Update Pack 1



  • gibt es die Datei auf deinem rechner ?
    ist der Pfad auf dieses Datei unter Projekt/Optionen/Pfade eingetragen ?



  • Habe die Datei schon gesucht. Ist auch nicht auf meinem Rechner.



  • hört sich nicht gut an.

    suche dclusr50.bpk, öffne di im BCB und gehe auf Projekt/neu erstellen.

    wenn die auch nicht da ist, öffne die *.bpr- Datei deines Projektes mit nem Editor und entferne alle Einträge 'DCLUSR50.BPI'.
    Wenn dein Projekt die Inahlte verwendet hasste allerdings ein Problem. Ansonsten ist dann ok.



  • Variante 1)
    Projekt schliessen, ggf. BCB beenden, alle temporären Dateien im Projektverzeichnis löschen.
    Also alles ausser *.h, *.cpp, *.bpr, *.dfm
    Dann BCB und Projekt neu laden.

    Variante 2)
    Projekt und ggf. BCB schliessen. Die *.bpr-Datei im Texteditor öffnen und alle Verweise auf besagte Datei löschen (vorher Backup anlegen).
    Dann BCB und Projekt neu laden.

    Variante 3)
    Ein neues Projekt anlegen und den Code rüberkopieren.



  • 🙂 wir sollten ncht so viel gleichzeitg arbeiten *G*
    /me geht dann mal ins .NET



  • Jupp das war es. *.bpr geöffnet Editiert -> Compiliert = rennt :-))

    Vielen Dank, geiles Board. Ab in die Falle.

    Gruß
    Kohli



  • install dclusr50 pacekage in C:\Program Files\Borland\CBuilder5\Lib


Anmelden zum Antworten