Voici la situation, je suis en utilisant un C en fonction de la dll dans mon dot.net application. Il y a 2 dll, on est en 32 bits appelé MyDll32.dll et l'autre est une version 64 bits appelé MyDll64.dll.
Il y a une statique de la variable contenant le nom du fichier DLL: string DLL_FILE_NAME.
et il est utilisé de la manière suivante:
[DllImport(DLL_FILE_NAME, CallingConvention=CallingConvention.Cdecl, EntryPoint=Func1")]
private static extern int is_Func1(int var1, int var2);
Simple jusqu'à présent.
Comme vous pouvez l'imaginer, le logiciel est compilé avec "any CPU" est activée.
J'ai aussi le code suivant pour déterminer si le système doit utiliser le 64 bits fichier ou le 32-bit fichier.
#if WIN64
public const string DLL_FILE_NAME = "MyDll64.dll";
#else
public const string DLL_FILE_NAME = "MyDll32.dll";
#endif
Maintenant vous devriez voir le problème.. DLL_FILE_NAME est défini au moment de la compilation et non pas de la durée d'exécution de sorte que le droit dll n'est pas chargée, selon le contexte d'exécution.
Quelle serait la bonne façon de traiter ce problème? Je ne veux pas de deux de l'exécution de fichiers (un pour les 32 bits et l'autre pour le 64 bits)? Comment puis-je définir DLL_FILE_NAME avant il est utilisé dans le DllImport déclaration?