[VC++] Compile/link errors, maar niet met dev-cpp

Pagina: 1
Acties:

  • PoweRoy
  • Registratie: April 2002
  • Laatst online: 08:23
ik zit met een vervelend probleem met de syntax/compile controle van Microsoft Visual Studio .NET 2003.

Voor Navision database kan ik connectie maken met de cfront koppeling. Ik heb hierbij de cf.h, libload.c en de cfront.dll.

als eerste in mijn applicatie roep ik SessionInit("CFRONT.DLL");

de functie is zo gedefineerd

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//relevante typedefs
typedef unsigned char                DBL_U8;
typedef signed   short int           DBL_S16;

//relevant
typedef struct DLL
{
  char               DLLName[20];
  DBL_S16            DLLLoaded;
  DBL_DLLHandleType* DLLHandle;
} DLL;

typedef struct DLL* HDLLSESSION;

static HDLLSESSION hGlobalSession = NULL;

void SessionInit(DBL_U8* DLLName)
{
  hGlobalSession = malloc(sizeof(DLL));
  strcpy(hGlobalSession->DLLName, (char*)DLLName);
  hGlobalSession->DLLLoaded = 0;
  DBL_Init();
}


Bij hGlobalSession = malloc(sizeof(DLL)); gaat ie over zijn nek met
error C2440: '=' : cannot convert from 'void *' to 'HDLLSESSION'
Als ik typecast: hGlobalSession = (HDLLSESSION)malloc(sizeof(DLL));
Dan krijg ik een linker error dat ik de functies, die ik in de main gebruik, niet kan vinden.

Maar waarom dit topic niet in programming staat is als volgt. Als ik het zelfde project met Dev-c++ compile geeft hij niet de convert error en werkt het.

Ik denk dat het ligt aan een strictere controle door VS, maar hoe kan ik die subtieler zetten? Heb zitten zoeken bij project properties maar daar vind ik alleen over warning level. Dit is een error en geen warning...

[This space is for rent]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

(jarig!)
Ondanks wat jij zegt heeft dit niets met tools te maken maar gewoon met de taal C++, en hoort het dus in Programming :).
DTE -> PRG

Het verschil zit 'm waarschijnlijk in het feit dat je met dev-cpp als C compileert, terwijl je MSVC++ het als C++ code laat compileren. Het ziet er iig uit als typische C code (typedef struct, malloc, ...), je zou je file een .c extensie kunnen geven of gewoon in de properties aanvinken dat het C is en niet C++.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

edit:

dacht oplossing te hebben maar te snel gelezen 8)7

edit2:

probeer die malloc eerst naar een unsigned long te casten, oftewel adres opslaan van een void* naar een dword en daarna weer in HDLLSESSION te casten:

code:
1
2
3
typedef unsigned long dword; // vind ik makkelijk :9

hGlobalSession = (HDLLSESSION)(dword)malloc(sizeof(DLL));


MSVC++ doet daar meestal nogal moeilijk over om gelijk van void* naar xxxx* te casten. Ik gebruik altijd de truc om em eerst naar bijvoorbeeld een unsigned long te casten en daarna naar het gewenste type.

[ Voor 160% gewijzigd door Verwijderd op 07-03-2006 14:50 ]


  • PoweRoy
  • Registratie: April 2002
  • Laatst online: 08:23
hmm toch verkeerd, my bad

maar als antwoord:
verrek ik heb bij dev-c++ een c project gemaakt ipv c++. Nu geeft de compiler ook dezelfde errors...
had wel bij mijn oude c-project bij de beide .c files dat het moest worden gecompiled als c++ maar hij gaf de fouten niet aan.
Verwijderd schreef op dinsdag 07 maart 2006 @ 14:38:
edit:

dacht oplossing te hebben maar te snel gelezen 8)7
hehe snel editen :P jup ik heb geprobeerd te typecasten

EDIT:
arg dit kan echt niet. Heb de optie van compilen als C++ naar C en weer terug gedaan (in VS). Nu werkt het gewoon wel. (hoewel het programma niet compiled bij dev-c++, hij loopt daar nu op een ander stuk vast.

Wat mij betreft kan deze topic weer worden gesloten :)

[ Voor 22% gewijzigd door PoweRoy op 07-03-2006 14:53 ]

[This space is for rent]


Verwijderd

Nog een keer ge-edit ;) Misschien nu de oplossing :P;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

(jarig!)
Lupare: de oplossing was er allang, en jouw oplossing is geen valide oplossing. Het punt is dat je in C gewoon impliciet mag casten van void* naar een ander pointer type, wat in C++ niet zo is. Heeft niets te maken met MSVC++ zelf.

[ Voor 8% gewijzigd door .oisyn op 07-03-2006 14:56 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

ik noem msvc++, omdat ik dit met djgpp niet kreeg (C++) daar mocht het weer wel en aangezien ik alleen djgpp en msvc++ gebruik ging ik er vanuit dat alleen msvc++ dat deed ;)
Pagina: 1