[MSVC++] Geen non-ptr cpp class in return bij extern "C"

Pagina: 1
Acties:

  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
Hallo!

Als ik in Windows mijn DLL wil gebruiken via LoadLibrary, moeten de geexporteerde functies in het C namespace staan met extern "C".
Het probleem is alleen dat je geen non-pointer c++ class'en als return waarde meer kunt geven (ik geloof ook niet eens argumenten).
Is hier een workaround voor of moet ik mijn hele broncode veranderen? (GCC keurt het nl. wél goed)

Bedankt,
Barry

[ Voor 4% gewijzigd door phaas op 04-03-2004 21:00 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Wat voor foutmeldingen krijg je precies?

  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
C Linkage function cannot return C++ class 'QValueList<class Edukitty::ComponentInfo>'

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

:?
Vaag, VC++ 7.1 geeft alleen een warning
test4.cpp(9) : warning C4190: 'bla' has C-linkage specified, but returns UDT 'S' which is incompatible with C
test4.cpp(4) : see declaration of 'S'
Het werkt dus wel

[ Voor 7% gewijzigd door .oisyn op 04-03-2004 21:14 ]

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.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Misschien kan je het object serializen naar een POD type, en dat doorgeven en dan weer uitpakken. (parameter marshalling ala corba/com).

Het werkt misschien nu wel met een andere compiler, maar hoe lang, en met wat? Kan je je dll bv ook uit VB, of ansi-c gebruiken?

  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
.oisyn schreef op 04 maart 2004 @ 21:13:
:?
Vaag, VC++ 7.1 geeft alleen een warning

[...]


Het werkt dus wel
Hmmz.... zo het ook écht werken?
Ik gebruik trouwens VC++ 6 :(

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Het zou moeten werken. VC6 is natuurlijk wel ouder dan beide C++ standaarden (98 en 03).

extern"C" is overigens niet de C namespace. Die bestaat niet. Wat wel bestaat is het C name mangling algoritme voor externe identifiers, en dat kies je met extren "C". Dat betekent wel dat je geen overloading kunt doen met dat soort functies, omdat C geen overloading support.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1