Sono uno sviluppatore Windows, sto usando Microsoft Visual Studio 2008 SP1. La mia macchina per sviluppatori è a 64 bit.AnyCPU/x86/x64 per l'applicazione C# ed è dipendenza C++/CLI
Il software al momento sto lavorando è gestito .exe scritto in C#. Sfortunatamente, non ero in grado di risolvere l'intero problema esclusivamente in C#. Ecco perché ho sviluppato anche una piccola DLL gestita in C++/CLI. Entrambi i progetti sono nella stessa soluzione.
Il mio obiettivo di build C# .exe è "Qualsiasi CPU". Quando il mio obiettivo di compilazione della DLL C++ è "x86", la DLL non viene caricata. Per quanto ho capito quando ho cercato su google, il motivo è il linguaggio C++/CLI, a differenza di altri linguaggi .NET, compila il codice nativo, non il codice gestito.
Ho cambiato il target di build della DLL C++ in x64 e tutto funziona ora. Tuttavia, AFAIK cesserà di funzionare non appena il mio client installerà il mio prodotto su un sistema operativo a 32 bit. Devo supportare Windows Vista e 7, entrambe le versioni a 32 e 64 bit di ciascuna di esse.
Non voglio tornare a 32 bit. Quelle 250 righe di codice C++ nella mia DLL sono solo il 2% della mia base di codice. E quella DLL viene utilizzata solo in più punti, quindi nello scenario di utilizzo tipico non viene nemmeno caricata.
La mia DLL implementa due oggetti COM con ATL, quindi non posso usare l'impostazione di progetto "/clr:safe".
Non c'è modo per configurare la soluzione ed i progetti in modo che C# progetto si basa la versione "Qualsiasi CPU", il progetto C++ costruisce entrambe le versioni 32 bit e 64 bit, quindi nel runtime quando l'exe gestito sta iniziando up, utilizza DLL a 32 bit o DLL a 64 bit a seconda del sistema operativo?
O forse c'è qualche soluzione migliore di cui non sono a conoscenza?
Grazie in anticipo!
C'è un motivo per cui non puoi semplicemente distribuire due versioni, una per x86 e una per x64? –
Sei sicuro di voler compilare il C++ in CLI? – tgiphil