Utiliser la bibliothèque c ++ en c #

Salut les gars, j’essaye d’inclure la bibliothèque c ++ (DLL) dans mon projet c # mais chaque fois que je le fais, le message d’erreur suivant s’affiche dans VS2008, des suggestions?

EDIT: c’est une DLL C ++ MFC


Microsoft Visual Studio

Une référence à ‘C: \ Users \ cholachaguddapv \ Desktop \ imaging.dll’ n’a pas pu être ajoutée. Assurez-vous que le fichier est accessible et qu’il s’agit d’un assemblage ou d’un composant COM valide.

S’il s’agit d’une DLL “normale” (pas de COM, pas de C ++ géré), vous ne pouvez pas append une référence de ce type. Vous devez append des signatures p / invoke (définitions de méthodes statiques externes) pour les exportations que vous souhaitez appeler dans votre DLL.

[DllImport("yourdll.dll")] public static extern int ExportToCall(int argument); 

Consultez l’atsortingbut DllImport dans l’aide en ligne.

S’il s’agit d’une bibliothèque C ++ directe, il n’est pas possible de la référencer de cette manière.

Vous avez deux options: vous pouvez comstackr la bibliothèque C ++ en tant qu’assemblage et exposer le code non managé avec un wrapper C ++ / CLI.

-ou-

Vous pouvez utiliser certains appels p / invoke si la bibliothèque expose ses fonctionnalités via une API C.

Pourriez-vous développer la question un peu pour inclure quelques détails sur la façon dont vous appelez imaging.dll normalement à partir de c ++?

s’il s’agit d’une dll non gérée, vous ne pouvez pas y append de référence. Vous devez l’invoquer en utilisant pinvoke ou autres:

 public classFoo { [DllImport("myunmanaged.dll", CharSet = CharSet.Ansi)] private extern static int UnmanagedFunction(int type, int dest); } 

Si vous souhaitez le convertir en une dll gérée, consultez la page suivante: http://msdn.microsoft.com/en-us/library/aa446538.aspx

Si vous souhaitez en savoir plus sur pinvoke et dllimport, consultez la page suivante: http://msdn.microsoft.com/en-us/library/aa288468.aspx

À votre santé

La convention d’appel et la différence de modèle de mémoire entre le code géré (C #) et le code non géré (WIn32 C ++) les rendent incompatibles.

Toutefois, .NET inclut une technologie de pontage pour les objects COM. Par conséquent, si vous créez une DLL est un object COM, vous pouvez le faire fonctionner. Ce n’est cependant apparemment pas un object COM.

S’il s’agit d’une DLL C ++ vierge dans laquelle vous n’exportez que des fonctions compatibles C, vous pouvez utiliser P / Invoke pour utiliser ces fonctions. Si vous convertissez cette DLL C ++ en une DLL COM avec une bibliothèque de types, son utilisation est encore plus simple: vous pouvez importer la bibliothèque de types dans .NET et des wrappers .NET (appelés Runtime Callable Wrappers) sont créés pour vous.