[C++ / C#] Verkeerde DLL versie?

Pagina: 1
Acties:

  • WalterTamboer
  • Registratie: December 2003
  • Laatst online: 13-01-2017
Hey,

hier een klein probleempje, ik hoop dat iemand me kan helpen.

Ik heb een C++ code omgezet naar een Managed C++ DLL. Vanuit C# roep ik deze aan. Ik heb de DLL als referentie toegevoegd. Alle klassen zijn aan te roepen en het compileert ook goed, je zou dus denken dat er niets aan de hand is...

Het probleem nu: Zodra ik het programma run, krijg ik de volgende exception: "The file version and executable version don't match."

Ik heb werkelijk GEEN idee hoe ik dit moet oplossen... is er iemand die dit wel weet?

Alvast bedankt.

  • Glow
  • Registratie: November 2000
  • Laatst online: 22-07-2023

Glow

46&2 are just ahead of me.

Hmm ik heb dit ook wel eens als ik met Visual Studio 2005 een executable maak met C# en dan Managed C++ code vanuit een DLL aanroep. Maar vreemdgenoeg heb ik het niet als ik met VisualStudio 2003.NET hetzelfde project build. Ik vermoed dat het óf met je project-settings te maken heeft, óf het is misschien een verschil tussen VS 2005 en VS 2003. Je zou anders eens in de MSDN kunnen rondspeuren naar meer info (mits je dat niet al gedaan hebt).

Bij mijzelf ben ik in ieder geval teruggestapt op VS2003. Misschien is dat voor jou ook een oplossing (als je tenminste VS2005 gebruikt). Laat me het ff weten als je een fix hebt!

  • WalterTamboer
  • Registratie: December 2003
  • Laatst online: 13-01-2017
Hmm dat zou wel eens kunnen kloppen! Hmm.... Wel jammer dat ik geen Visual Studio 2003 heb... ik zal het eens even op een andere manier proberen.

Even kijken of ik GCC, Eclipse en dot GNU aan de praat kan krijgen; ik heb namelijk ergens gelezen dat dit ook wel lekker werkt!

Bedankt voor je reactie!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Wanneer vindt die exception plaats? Is dat op compiletime, startuptime of runtime?
Als het op runtime is kun je eventueel gaan steppen om te achterhalen om welk bestand het eigenlijk gaat...
Hoe laad je die library eigenlijk in? Met LoadLibrary of via DLLImport (is intern het zelfde trouwens, alleen de parameters zijn anders).

Localhost, sweet localhost


Verwijderd

Het zou inderdaad best kunnen dat het met dat LoadLibrary te maken heeft. Weet je zeker dat je wel de nieuwste versie van LoadLibrary gebruikt?

Of juist niet de laatste versie uiteraard.

[ Voor 14% gewijzigd door Verwijderd op 18-10-2005 15:20 ]


  • Glow
  • Registratie: November 2000
  • Laatst online: 22-07-2023

Glow

46&2 are just ahead of me.

Ik zou denk ik toch even proberen te kijken waar het precies door komt, voordat je gelijk heel gcc/eclipse/dotGNU erbij gaat halen (het is vrij zonde van je tijd als het gewoon een simpele setting ofzo blijkt te zijn).

LievenDenningger: ... versies van LoadLibrary? daar heb ik eigenlijk nog nooit van gehoord.

Verwijderd

je hebt toch allemaal van die versies, versie LoadLibraryA, versie LoadLibraryB ik geloof zelfs dat ze al bij LoadLibraryW zijn...

Ik moet zeggen dat ik zelf nog altijd versie A gebruik, maar misschien kan een andere versie het probleem oplossen

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

* kvdveer fronstgrinnikt. Versies van loadlibrary?
LoadLibrary is onderdeel van windows (kernel32.dll onder winnt/win2k/winxp). Daar bestaan verschillende versies van maar die kun je niet zelf kiezen...

Het valt wel mee met de verschillende versies..., er bestaat LoadLibraryA, LoadLibraryW en loadLibraryEx.
Uit winbase.h:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WINBASEAPI
__out
HMODULE
WINAPI
LoadLibraryA(
    __in LPCSTR lpLibFileName
    );
WINBASEAPI
__out
HMODULE
WINAPI
LoadLibraryW(
    __in LPCWSTR lpLibFileName
    );
#ifdef UNICODE
#define LoadLibrary  LoadLibraryW
#else
#define LoadLibrary  LoadLibraryA
#endif // !UNICODE

[ Voor 62% gewijzigd door kvdveer op 18-10-2005 15:37 ]

Localhost, sweet localhost


  • WalterTamboer
  • Registratie: December 2003
  • Laatst online: 13-01-2017
Kan je ze wel zelf maken? Ik zou het wel leuk vinden om LoadLibraryWT te gebruiken ivm m'n naam.

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Ja hoor:
code:
1
#define LoadLibraryWT LoadLibraryW


of als je rekening wilt houden met multibyte en singlebyte charactesets:

C:
1
2
3
4
5
#ifdef UNICODE
#define LoadLibraryWT LoadLibraryW
#else
#define LoadLibraryWT LoadLibraryA
#endif // !UNICODE

[ Voor 66% gewijzigd door kvdveer op 18-10-2005 15:39 ]

Localhost, sweet localhost


  • WalterTamboer
  • Registratie: December 2003
  • Laatst online: 13-01-2017
hahahahahahahahahahaha leuk :D

[EDIT]

ik ben trouwens Visual Studio 2003 aan het downloaden maarja, emule is niet zo snel.

[ Voor 63% gewijzigd door WalterTamboer op 18-10-2005 15:40 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 18 oktober 2005 @ 15:32:
je hebt toch allemaal van die versies, versie LoadLibraryA, versie LoadLibraryB ik geloof zelfs dat ze al bij LoadLibraryW zijn...

Ik moet zeggen dat ik zelf nog altijd versie A gebruik, maar misschien kan een andere versie het probleem oplossen
kvdveer schreef op dinsdag 18 oktober 2005 @ 15:33:
LoadLibrary is onderdeel van windows (kernel32.dll onder winnt/win2k/winxp). Daar bestaan verschillende versies van maar die kun je niet zelf kiezen...

Het valt wel mee met de verschillende versies..., er bestaat LoadLibraryA, LoadLibraryW en loadLibraryEx.
Allebei wrong :P

LoadLibrary1 kent een variant, LoadLibraryEx2 (waarbij de Ex staat voor extended ofzo geloof ik).

1) LoadLibraryW is de Unicode variant daarvan en LoadLibraryA is de ANSI variant.
2) LoadLibraryExW is de Unicode variant daarvan en LoadLibraryExA is de ANSI variant.


Verder heb je dus geen "versies". Het zijn niet eens versies, maar gewoon verschillende functies, of de manier waarop de geïmplementeerd zijn.

Overigens zijn beide (LoadLibrary en LoadLibraryEx) gewoon beschikbaar vanaf Windows 95 en hoger hoor.

[ Voor 58% gewijzigd door RobIII op 18-10-2005 15:46 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • WalterTamboer
  • Registratie: December 2003
  • Laatst online: 13-01-2017
Je zit toch niet met me te dollen he!

Verwijderd

Joh, dat heb ik echt nooit begrepen, dus je kan eigenlijk ook gewoon LoadLibrary typen?

Verwijderd

WalterTamboer schreef op dinsdag 18 oktober 2005 @ 15:42:
Je zit toch niet met me te dollen he!
wat is dat nou voor een antwoord, het is toch zeker je eigen topic

  • WalterTamboer
  • Registratie: December 2003
  • Laatst online: 13-01-2017
Ow wat raar... na het opnieuw compilen doet die het gewoon.

[EDIT]

Bedankt voor de reacties.

[ Voor 25% gewijzigd door WalterTamboer op 18-10-2005 15:49 ]

Pagina: 1