2010-09-29 7 views
0

Comment appeler des fonctions à partir d'une DLL C++?Interface C# C++ DLL?

La DLL C++ contient des fonctions comme ceci:

__declspec(dllexport) bool Setup() { return simulation.Setup(); } 

Le programme C# fait ceci:

[DllImport("mydll.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool Setup(); 

C# programme se bloque avec le message suivant quand il tente de charger la DLL (?) :

An unhandled exception of type 'System.BadImageFormatException' occurred in TestFrame.exe 

Additional information: There was an attempt to load a file with a wrong format (exception from HRESULT: 0x8007000B) 

The C++ DLL is a standard DLL (no MFC, no ATL). 
+1

assembly .NET 64 bits essayant de charger un fichier .dll natif 32 bits? Vice versa? –

+0

Google se traduit par 'Une tentative a été faite pour charger un programme avec un format incorrect. (Exception de HRESULT: 0x8007000B) ' – SLaks

+0

Est-ce sur le système d'exploitation 64 bits? Si l'application .NET est compilée en tant que AnyCPU et que la DLL C++ est en 32 bits, la DLL ne se chargera pas. –

Répondre

2

Cette erreur se produit lorsque vous essayez de charger une DLL 32 bits dans un processus 64 bits. (Ou inversement)
Jusqu'à VS2010, les projets C# ciblent toutes les CPU par défaut et s'exécutent en 64 bits sur un système d'exploitation 64 bits.

Vous devez accéder à l'onglet Générer dans Propriétés du projet et définir le projet C# sur x86 uniquement.

1

Est-il possible que votre exe et dll ont des bits différents (ie on a 64 et e autre 32)?

0

Avez-vous essayé de compiler le code pour la plate-forme x86? Voir le blog this pour obtenir des instructions.