/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
HJÆLP! Kan ikke compile/builde i MS Visual~
Fra : Jakob Bro Nielsen


Dato : 29-11-00 20:00

Hej Gruppe

Jeg er ved at skrive et lille program i MS Visual C++ 6.0 (VC++), der kan
modtage nogle data fra et IO-kort, der er tilsluttet en CAN-bus.

Jeg benytter nogle medleverende C-rutiner til at hente data. Disse rutiner
ligger i filen CAN841l.lib og filen CAN841.h indeholder prototyper af
rutinerne. Jeg har haft det til at fungere i Borland C++ 5.0 (BC5). Koden
har jeg i rx.c

Grunden til at jeg nu vil lave det i VC++ er, at jeg senere skal gøre
C-koden tilgængelig for Java via Java Native Interface (JNI). Det kan jeg
kun få til at lykkes med linkeren, der følger med BC5 men uden problemer med
den, der følger med VC++. Er der nogen, der har haft det til at virke med
BC5 så hører jeg _meget_ gerne om det!

Når jeg forsøger at builde mit projekt i VC++ får jeg denne fejlmeddelelse:

"
--------------------Configuration: rx - Win32 Debug--------------------
Compiling...
rx.c
Linking...
...\..\Can841l.lib : fatal error LNK1136: invalid or corrupt file
Error executing link.exe.

rx.exe - 1 error(s), 0 warning(s)
"

Det med at can841l.lib skulle være korrupt stemmer ikke overens med,at jeg
har benyttet selv samme fil til at lave et tilsvarende program i BC5. Et
muligt svar er, at .lib-filen er en slags 16-bit-fil og VC++ kun kan arbejde
med 32-bit-filer (jeg ved virkelig ikke hvad jeg taler om her Hvis det
er tilfældet kan VC++ så ikke tvinges til at modtage 16-bit-filer?

På denne URL kan mit skærmbillede fra VC++ ses (inkl. fejlmeddelsen):
www.kom.auc.dk/~fisker/vc.htm
De omtalte filer er anført her nedenfor.

På forhånd tak!

Jakob Bro Nielsen
AAU

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

rx.c
"
//
// Fil: rx.c
// Dato: 27-11-00
//
// Skal modtage data fra CAN-port 1
//

#include "can841.h"
#include "504.h"
#include <stdio.h>
#include <conio.h>

void main(void)
{
UI gSegment=0xDA00;
CAN_STRUCT can1;
MSG_STRUCT rmsg;
UI i;

if (canInitHW(gSegment, CAN1_IRQ, CAN2_IRQ)==FAIL)
{
printf("Initialisering af PC-interface lykkedes ikke\n");
return;
}
else
{
printf("Initialisering af PC-interface OK\n");
}

if (canReset(PORT1)==FAIL)
{
printf("Kunne ikke resette port 1\n");
}
else
{
printf("Port 1 resat\n");
}


can1.acc_code=0x0; /* */
can1.acc_mask=0xff; /* */
can1.bt0=0x03; /* baud rate 125Kbps */
can1.bt1=0x1c;
if (canConfig(PORT1, can1) == FAIL)
{
printf("CAN-controller port %d kunne ikke konfigureres\n",1);
return;
}
else
{
printf("CAN-controller port %d konfigureret\n",1);
}

canNormalRun(PORT1); /* Put CAN1,2 to normal mode */


while(1)
{
if (canReceiveMsg(PORT1, &rmsg) == 1)
{
printf("PORT1 modtog: ID = %3X, RTR = %1d, Length = %1d. Data:",
rmsg.id,rmsg.rtr, rmsg.dlen);

for(i=0 ; i< rmsg.dlen ; i++)
{
printf(" %2X",rmsg.data[i]);
}

printf("\n");
}


if (kbhit())
{
getch();
break;
}
}


canReset(PORT1);

if (canExitHW()==FAIL)
{
printf("Kunne ikke lukke forbindelsen til CAN-bussen\n");
}
else
{
printf("Forbindelsen er lukket\n");
}
}
"

504.h
"
#define CAN1_IRQ 0 // 0 mean polling
#define CAN2_IRQ 0 // 0 mean polling

#define PORT1 0
#define PORT2 1

#define FAIL 0
#define SUCCESS 1

#define OUTPUT 0x7f9
#define INPUT 0x7f8
"

CAN841.h
"
/***************************************************************************
**
* FILE : CAN841.H
* DATE : 11-3-95'
* Version : V1.0
* Description : Prototype for CAN841x.LIB
*
*
*

****************************************************************************
**/

#define BYTE unsigned char
#define UI unsigned int
#define UL unsigned long

typedef struct {
BYTE acc_code;
BYTE acc_mask;

 
 
Claus (30-11-2000)
Kommentar
Fra : Claus


Dato : 30-11-00 00:08

Borland lib-filer er ikke kompatible med VC++.

Du er nødt til enten at have en VC version af lib-filen eller sourcen, så du
kan lave den selv.

Claus

"Jakob Bro Nielsen" <fisker@kom.auc.dk> wrote in message
news:EmcV5.13015$zs.355142@twister.sunsite.auc.dk...
> Hej Gruppe
>
> Jeg er ved at skrive et lille program i MS Visual C++ 6.0 (VC++), der kan
> modtage nogle data fra et IO-kort, der er tilsluttet en CAN-bus.
>
> Jeg benytter nogle medleverende C-rutiner til at hente data. Disse rutiner
> ligger i filen CAN841l.lib og filen CAN841.h indeholder prototyper af
> rutinerne. Jeg har haft det til at fungere i Borland C++ 5.0 (BC5). Koden
> har jeg i rx.c
>
> Grunden til at jeg nu vil lave det i VC++ er, at jeg senere skal gøre
> C-koden tilgængelig for Java via Java Native Interface (JNI). Det kan jeg
> kun få til at lykkes med linkeren, der følger med BC5 men uden problemer
med
> den, der følger med VC++. Er der nogen, der har haft det til at virke med
> BC5 så hører jeg _meget_ gerne om det!
>
> Når jeg forsøger at builde mit projekt i VC++ får jeg denne
fejlmeddelelse:
>
> "
> --------------------Configuration: rx - Win32 Debug--------------------
> Compiling...
> rx.c
> Linking...
> ..\..\Can841l.lib : fatal error LNK1136: invalid or corrupt file
> Error executing link.exe.
>
> rx.exe - 1 error(s), 0 warning(s)
> "
>
> Det med at can841l.lib skulle være korrupt stemmer ikke overens med,at jeg
> har benyttet selv samme fil til at lave et tilsvarende program i BC5. Et
> muligt svar er, at .lib-filen er en slags 16-bit-fil og VC++ kun kan
arbejde
> med 32-bit-filer (jeg ved virkelig ikke hvad jeg taler om her Hvis det
> er tilfældet kan VC++ så ikke tvinges til at modtage 16-bit-filer?
>
> På denne URL kan mit skærmbillede fra VC++ ses (inkl. fejlmeddelsen):
> www.kom.auc.dk/~fisker/vc.htm
> De omtalte filer er anført her nedenfor.
>
> På forhånd tak!
>
> Jakob Bro Nielsen
> AAU
>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>
> rx.c
> "
> //
> // Fil: rx.c
> // Dato: 27-11-00
> //
> // Skal modtage data fra CAN-port 1
> //
>
> #include "can841.h"
> #include "504.h"
> #include <stdio.h>
> #include <conio.h>
>
> void main(void)
> {
> UI gSegment=0xDA00;
> CAN_STRUCT can1;
> MSG_STRUCT rmsg;
> UI i;
>
> if (canInitHW(gSegment, CAN1_IRQ, CAN2_IRQ)==FAIL)
> {
> printf("Initialisering af PC-interface lykkedes ikke\n");
> return;
> }
> else
> {
> printf("Initialisering af PC-interface OK\n");
> }
>
> if (canReset(PORT1)==FAIL)
> {
> printf("Kunne ikke resette port 1\n");
> }
> else
> {
> printf("Port 1 resat\n");
> }
>
>
> can1.acc_code=0x0; /* */
> can1.acc_mask=0xff; /* */
> can1.bt0=0x03; /* baud rate 125Kbps */
> can1.bt1=0x1c;
> if (canConfig(PORT1, can1) == FAIL)
> {
> printf("CAN-controller port %d kunne ikke konfigureres\n",1);
> return;
> }
> else
> {
> printf("CAN-controller port %d konfigureret\n",1);
> }
>
> canNormalRun(PORT1); /* Put CAN1,2 to normal mode */
>
>
> while(1)
> {
> if (canReceiveMsg(PORT1, &rmsg) == 1)
> {
> printf("PORT1 modtog: ID = %3X, RTR = %1d, Length = %1d. Data:",
> rmsg.id,rmsg.rtr, rmsg.dlen);
>
> for(i=0 ; i< rmsg.dlen ; i++)
> {
> printf(" %2X",rmsg.data[i]);
> }
>
> printf("\n");
> }
>
>
> if (kbhit())
> {
> getch();
> break;
> }
> }
>
>
> canReset(PORT1);
>
> if (canExitHW()==FAIL)
> {
> printf("Kunne ikke lukke forbindelsen til CAN-bussen\n");
> }
> else
> {
> printf("Forbindelsen er lukket\n");
> }
> }
> "
>
> 504.h
> "
> #define CAN1_IRQ 0 // 0 mean polling
> #define CAN2_IRQ 0 // 0 mean polling
>
> #define PORT1 0
> #define PORT2 1
>
> #define FAIL 0
> #def

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste