Ich bin Windows-Entwickler, ich verwende Microsoft Visual Studio 2008 SP1. Meine Entwicklermaschine ist 64 Bit.AnyCPU/x86/x64 für C# -Anwendung und es ist C++/CLI-Abhängigkeit
Die Software, die ich gerade bearbeite, wird verwaltet .exe in C# geschrieben. Leider konnte ich das ganze Problem nicht nur in C# lösen. Deshalb habe ich auch eine kleine gemanagte DLL in C++/CLI entwickelt. Beide Projekte sind in der gleichen Lösung.
Mein C# .exe-Buildziel ist "Any CPU". Wenn mein C++ - DLL-Buildziel "x86" ist, wird die DLL nicht geladen. Soweit ich verstanden habe, wenn ich googled, der Grund ist C++/CLI-Sprache, im Gegensatz zu anderen .NET-Sprachen, kompiliert, um den systemeigenen Code, nicht verwalteten Code.
Ich wechselte das Build-C++ - DLL-Ziel auf x64, und alles funktioniert jetzt. AFAIK funktioniert jedoch nicht mehr, sobald mein Client mein Produkt auf einem 32-Bit-Betriebssystem installiert. Ich muss Windows Vista und 7 unterstützen, 32-und 64-Bit-Versionen von jedem von ihnen.
Ich möchte nicht auf 32 Bits zurückfallen. Diese 250 Zeilen C++ Code in meiner DLL sind nur 2% meiner Codebasis. Und diese DLL wird nur an mehreren Stellen verwendet, daher ist sie im typischen Anwendungsszenario nicht einmal geladen.
Meine DLL implementiert zwei COM-Objekte mit ATL, daher kann ich die Projekteinstellung "/clr:safe" nicht verwenden.
Gibt es Möglichkeit, die Lösung und die Projekte so zu konfigurieren, dass C# Projekt baut „Any CPU“ -Version, die C++ Projekt beiden 32-Bit und 64-Bit-Versionen, dann in der Laufzeit, wenn das verwaltete .EXE beginnt baut up, es verwendet je nach Betriebssystem entweder 32-Bit-DLL oder 64-Bit-DLL?
Oder gibt es vielleicht eine bessere Lösung, die mir nicht bekannt ist?
Vielen Dank im Voraus!
Gibt es ein Grund, warum Sie nicht einfach zwei Versionen verteilen können, eine für x86 und eine für x64? –
Sind Sie sicher, dass Sie das C++ zu CLI kompilieren? – tgiphil