[Linker Fataler Fehler] Fatal: Unable to open file 'DCLUSR50.BPI'
-
Hallo erst mal.
Bin absoluter Neuling, aber da ich in einer Projektarbei zum Informatiktechniker jetzt ein Programm mit dem Borland Builder schreiben muss, werde ich wohl öfter mal vorbei schauen. Ich hoffe ich Nerve nicht zu viel :-))Wollte ein Programm Compilieren, bekomme aber immer diese Meldung.
[Linker Fataler Fehler] Fatal: Unable to open file 'DCLUSR50.BPI'Was kann ich da machen.
Gruß
Kohli
-
Erstmal kannst du uns verraten, wie dein Programm aussieht und ob der Fehler auch bei einem Minimal-Projekt auftritt (d.h. leere Form).
-
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ß
Kohlibitte 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