Toon posts:

[C++ builder] lib file werkt niet ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Bij het compilen van m'n progje krijg ik allemaal vage foutmeldingen in de meegeleverde headerfile. Dit komt 99% zeker doordat een lib file niet goed meegelinkt wordt. De headerfile is 100% werkend en de lib file ook.
Ik gebruik C++ builder en heb de lib file al toegevoegd aan het project, in de source staat "USELIB("blaat.lib");" en toch werkt het niet. Iemand een idee hoe dit op te lossen is ?

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Tijdens compilen wordt er (IIRC) niet naar libs gekeken.

Verwijderd

Topicstarter
Hoort de naam van de libfile terug te vinden te zijn in een detailed map file ?

Verwijderd

Borland en microsoft gebruiken een ander library formaat, probeer je geen ms lib mee te linken met je borland linker? borland heeft een conversie tooltje als het goed is. coff2iets ofzo.

Verwijderd

Is de libfile in het juiste lib formaat?
Borland gebruikt namelijk OMF en Microsoft bijvoorbeeld COFF
(of andersom)... dit leidt vaak tot problemen bij het
meelinken van libs... er is een tooltje bij CPPBuilder
meegeleverd waarmee je het formaat kunt converteren
(implib.exe geloof ik)

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Project->View Makefile

Voeg achter 'ALLLIB =' je .lib file toe.

Verwijderd

Topicstarter
Het gaat om de lib file van dlportio. En daarmee heb ik al werkende apps gemaakt in builder. Had laatst ook al vergelijkbare lijst van foutmeldingen, maar toen stond er geen uselib. Dat eenmaal toegevoegd werkte het wel. Dit keer staat het er al bij, maar het werkt dus niet en waar het nu aan ligt? Ik weet het niet meer.

Daar komt nog eens bij dat het hiervoor (zonder GUI) perfect werkte zonder problemen. Enige wat er nu meer bij zit is een leeg form met alleen een simpel menu.

Verwijderd

Topicstarter
Op maandag 07 januari 2002 14:25 schreef [ti] het volgende:
Project->View Makefile

Voeg achter 'ALLLIB =' je .lib file toe.
Biedt helaas ook geen uitkomst. Zelfde resultaat...

btw, library path klopt ook

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Post je vage foutmeldingen dan eens, misschien zijn ze voor ons minder vaag.

Verwijderd

Topicstarter
Op maandag 07 januari 2002 14:33 schreef [ti] het volgende:
Post je vage foutmeldingen dan eens, misschien zijn ze voor ons minder vaag.
Dit zijn de foutmeldingen, maar zoals ik al zei ligt het niet aan die headerfile. De meldingen komen omdat ie niet kan 'connecten' met de dll oid.

[C++Error] DLPORTIO.H(44): Declaration syntax error.
[C++Error] DLPORTIO.H(49): Declaration syntax error.
[C++Error] DLPORTIO.H(54): Declaration syntax error.
[C++Error] DLPORTIO.H(59): Declaration syntax error.
[C++Error] DLPORTIO.H(66): Multiple declaration for 'VOID'.
[C++Error] DLPORTIO.H(59): Earlier declaration of 'VOID'.
[C++Error] DLPORTIO.H(66): Declaration syntax error.
[C++Error] DLPORTIO.H(73): Multiple declaration for 'VOID'.
[C++Error] DLPORTIO.H(66): Earlier declaration of 'VOID'.
[C++Error] DLPORTIO.H(73): Declaration syntax error.
[C++Error] DLPORTIO.H(80): Multiple declaration for 'VOID'.
[C++Error] DLPORTIO.H(73): Earlier declaration of 'VOID'.
[C++Error] DLPORTIO.H(80): Declaration syntax error.
[C++Error] DLPORTIO.H(86): Multiple declaration for 'VOID'.
[C++Error] DLPORTIO.H(80): Earlier declaration of 'VOID'.
[C++Error] DLPORTIO.H(86): Declaration syntax error.
[C++Error] DLPORTIO.H(92): Multiple declaration for 'VOID'.
[C++Error] DLPORTIO.H(86): Earlier declaration of 'VOID'.
[C++Error] DLPORTIO.H(92): Declaration syntax error.
[C++Error] DLPORTIO.H(98): Multiple declaration for 'VOID'.
[C++Error] DLPORTIO.H(92): Earlier declaration of 'VOID'.
[C++Error] DLPORTIO.H(98): Declaration syntax error.
[C++Error] DLPORTIO.H(105): Multiple declaration for 'VOID'.
[C++Error] DLPORTIO.H(98): Earlier declaration of 'VOID'.
[C++Error] DLPORTIO.H(105): Declaration syntax error.
[C++Error] DLPORTIO.H(105): Too many error or warning messages.

En dit is wat er zoal in de headerfile staat:
code:
1
2
3
4
5
6
#define DLPORT_API _stdcall

UCHAR DLPORT_API
DlPortReadPortUchar(
    IN ULONG Port
    );

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Nou, in mijn boekje heeft dit geen fsck met je .lib files te maken.

Paste eens regel 40 tot 80 uit DLPORTIO.H?

Verwijderd

Topicstarter
Hier de hele headerfile (op een zooi copyright comment enz na). Helemaal of alleen regels 40 t/m 80 maakt weinig verschil ;)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#ifndef DLPORTIO_H
#define DLPORTIO_H

#ifdef __cplusplus
extern "C" {
#endif

#ifndef IN
  #define IN
#endif

#define DLPORT_API _stdcall

UCHAR DLPORT_API
DlPortReadPortUchar(
    IN ULONG Port
    );

USHORT DLPORT_API
DlPortReadPortUshort(
    IN ULONG Port
    );

ULONG DLPORT_API
DlPortReadPortUlong(
    IN ULONG Port
    );

VOID DLPORT_API
DlPortReadPortBufferUchar(
    IN ULONG Port,
    IN PUCHAR Buffer,
    IN ULONG  Count
    );

VOID DLPORT_API
DlPortReadPortBufferUshort(
    IN ULONG Port,
    IN PUSHORT Buffer,
    IN ULONG Count
    );

VOID DLPORT_API
DlPortReadPortBufferUlong(
    IN ULONG Port,
    IN PULONG Buffer,
    IN ULONG Count
    );

VOID DLPORT_API
DlPortWritePortUchar(
    IN ULONG Port,
    IN UCHAR Value
    );

VOID DLPORT_API
DlPortWritePortUshort(
    IN ULONG Port,
    IN USHORT Value
    );

VOID DLPORT_API
DlPortWritePortUlong(
    IN ULONG Port,
    IN ULONG Value
    );

VOID DLPORT_API
DlPortWritePortBufferUchar(
    IN ULONG Port,
    IN PUCHAR Buffer,
    IN ULONG  Count
    );

VOID DLPORT_API
DlPortWritePortBufferUshort(
    IN ULONG Port,
    IN PUSHORT Buffer,
    IN ULONG Count
    );

VOID DLPORT_API
DlPortWritePortBufferUlong(
    IN ULONG Port,
    IN PULONG Buffer,
    IN ULONG Count
    );

#ifdef __cplusplus
}
#endif

#endif

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Ik maar even dat dlportio ook gedownload. In bcb nieuwe applicatie geopend, in form1.h #include "DLPORTIO.H" toegevoegd, en in de makefile DLPORTIO.LIB bij ALLLIB = toegevoegd. Toen op F9 gedrukt en het compiled allemaal zoals het moet hoor.

Verwijderd

Topicstarter
Op maandag 07 januari 2002 14:59 schreef [ti] het volgende:
Ik maar even dat dlportio ook gedownload. In bcb nieuwe applicatie geopend, in form1.h #include "DLPORTIO.H" toegevoegd, en in de makefile DLPORTIO.LIB bij ALLLIB = toegevoegd. Toen op F9 gedrukt en het compiled allemaal zoals het moet hoor.
Zou zou het normaal ook moeten werken :) Het heeft hier ook al tientallen keren goed gewerkt. Dat maakt het ook zo vaag, het is niet anders dan normaal toegepast en toch werkt het nu ineens niet :( 'k ga maar opnieuw beginnen, want dit schiet niet op..

Verwijderd

Topicstarter
/me begint zo langzamerhand zwaar gefrustreerd te worden...

Dit is niet leuk meer. Met alleen een form en verder niets werkt het includen verder goed, maar zodra dingen toegevoegd worden, niet meer :(

Heb alles helemaal kaal geript en nog werkt het niet :( Hieronder maar de kale source gepost in de hoop dat iemand het antwoord weet..

GUI.cpp
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//----------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("GUI.res");
USEFORM("LCD_Aansturing.cpp", Form1);
USEUNIT("LCD.cpp");
USEUNIT("T6963C.cpp");
USELIB("dlportio.lib");
//----------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
      Application->Initialize();
      Application->CreateForm(__classid(TForm1), &Form1);
      Application->Run();
    }
    catch (Exception &exception)
    {
      Application->ShowException(&exception);
    }
    return 0;
}
//----------------------------------------------------------

LCD_Aansturing.cpp
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//----------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "LCD_Aansturing.h"
#include "LCD.h"
#include "T6963C.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//----------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//----------------------------------------------------------

LCD_Aansturing.h
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//----------------------------------------------------------
#ifndef LCD_AansturingH
#define LCD_AansturingH
//----------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//----------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *TestButton;
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//----------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//----------------------------------------------------------
#endif

LCD.cpp
code:
1
2
3
4
#include "LCD.h"        // temp file with display specific variables
#include "T6963C.h"    // T6963C controller specific routines

void LCD::Test() { }

LCD.h
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef LCD_H
#define LCD_H

class LCD {
    public:
      LCD();            // constructor
      ~LCD();            // destructor
      void Test();
    private:
};

// constructor
LCD::LCD() { }

// destructor
LCD::~LCD() { }

#endif

T6963C.cpp
code:
1
2
3
4
#include "T6963C.h"
#include "dlportio.h"

void T6963C::Test2() { }

T6963C.h
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef T6963C_H
#define T6963C_H

class T6963C {
    public:
      T6963C();          // constructor
      ~T6963C();            // destructor
      void Test2();
    private:
};

// constructor
T6963C::T6963C() { }

// destructor
T6963C::~T6963C() { }

#endif

Verwijderd

Topicstarter
Laat ik nou vandaag onbedoeld de oplossing vinden :)

C++ builder plaatst USELIB onder USEUNIT en dus kennen de gebuikte units de library blijkbaar nog niet. Draai dit om en het werkt!
code:
1
2
3
niet zo:                  maar zo:
USEUNIT("iets.cpp");      =>    USELIB("libfile.lib");
USELIB("libfile.lib");      USEUNIT("iets.cpp");
Pagina: 1