AnyCPU/x86/x64 pour application en C# et C++/CLI dépendance
Je suis développeur Windows, je suis l'aide de Microsoft visual studio 2008 SP1. Mon ordinateur du développeur est de 64 bits.
Le logiciel, je suis actuellement en train de travailler sur est géré .exe écrit en C#. Malheureusement, j'ai été incapable de résoudre l'ensemble du problème uniquement en C#. C'est pourquoi j'ai également développé un petit géré une DLL en C++/CLI. Les deux projets sont dans la même solution.
Mon C# .exe construire cible "any CPU". Quand mon C++ DLL construire cible "x86", la DLL n'est pas chargé.
Aussi loin que je l'ai compris quand j'ai googlé, la raison est le C++/CLI langue, contrairement à d'autres .NET languages, compilé en code natif, pas de code managé.
Je suis passé au C++ DLL construire cible x 64, et tout fonctionne maintenant. Cependant, autant que je sache, tout s'arrête de fonctionner dès que mon client va installer mon produit sur un 32-bit OS. J'ai à prendre en charge Windows Vista et 7, les deux versions 32 et 64 bits de chacun d'eux.
Je n'ai pas envie de retomber sur 32 bits. De 250 lignes de code C++ dans ma DLL n'est que 2% de ma base de code. Et cette DLL n'est utilisé que dans plusieurs endroits, de sorte que dans le scénario d'utilisation habituelle, il n'est même pas chargé.
Ma DLL met en œuvre deux objets COM avec ATL, donc je ne peux pas utiliser "/clr:coffre-fort" projet de création d'.
Est-il moyen de configurer la solution et les projets, de sorte que C# projet s'appuie "any CPU" version, le projet C++ construit les deux 32 bits et les versions 64 bits, puis dans l'exécution lorsque le géré .EXE est en cours de démarrage, il utilise une DLL 32 bits ou 64 bits DLL en fonction de l'OS?
Ou peut-être il y a une meilleure solution, je ne suis pas au courant?
Merci d'avance!
Êtes-vous sûr de compiler le C++ CLI?
OriginalL'auteur Soonts | 2010-06-03
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de moyen facile autour d'elle. Si vous avez un code natif (C++) et vous avez besoin de soutien x86, vous devez compiler x86 (sauf si vous voulez travailler dans le monde WOW...c'est à dire. l'exécution de 32 bits en 32 et 64 bits envrionments). Vous peut ont à la fois un x86 et x64 distributions, mais si vous êtes en soutenant à la fois 32 bits et 64 bits, et vous avez un code natif ou COM introp", alors vous ont pour ont à la fois 32 bits et 64 bits binaires. "Any CPU" seul qui est vraiment utile quand il n'y a pas de code natif ou l'interopérabilité, puis vous obtenez ce que benifit.
si vous êtes l'auteur de votre package d'installation correctement, vous pouvez le sélectionner et installer le bon binaires. C'est ce que je fais lorsque des applications serveur et idiot administrateurs entrent en collision 🙂
OriginalL'auteur David B Heise
Il y a un moyen: "un AnyCPU" C# wrapper et un projet C++ par l'architecture, et de laisser le C# wrapper charger le projet de C++ au moment de l'exécution.
Pour le projet C++, créer une version par différentes architectures (x86, x64), et de construire tous les. Puis dans le wrapper faire:
Et dans le code C++, j'utilise les mêmes sources comme je l'ai dit, mais la compilation de différents noms selon le construire architecture:
OriginalL'auteur