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