Se si chiede un altro modo per combinare le librerie 2008 e 2010 in un eseguibile diverso da quello di spostare la parte 2010 all'esterno in una DLL, la risposta è probabilmente "non esiste un altro modo semplice per raggiungere questo obiettivo".
Ma se non si desidera "librerie di runtime VC++ 2010 ... in VS 2008" (che si sta creando contro le librerie 2010 nel vecchio IDE 2008), ma "utilizzare una DLL compilata nel 2010 nel 2008 -compile programma ", è perfettamente possibile.
Il modo più semplice, come lo facciamo nei nostri progetti, è di compilare (sia .exe che DLL) contro librerie standard collegate staticamente (MFC, se lo si utilizza) e quindi utilizzare LoadLibrary
nel file .exe per caricare il DLL. Nella DLL è possibile esportare (_declspec (dllexport)
) una funzione (preferibilmente all'interno delle protezioni extern "C" {}
) e utilizzarla nel file .exe tramite GetProcAddress
.
Il collegamento statico e il caricamento esplicito consentono di evitare numerosi bug di incoerenza causati da diversi runtime.
Se si è preoccupati del caricamento delle DLL e dei costi di chiamata delle funzioni, è possibile provare a rendere queste chiamate il più rare possibile (magari spostando non solo l'algoritmo, ma anche alcune altre logiche di alto livello nella DLL). Vedi anche this issie.
E è possibile creare tutto il codice in un IDE (2010) utilizzando native multitargeting (tuttavia sarà comunque necessario creare l'app principale e la DLL separatamente rispetto alle librerie v9 e v10 rispettivamente).
Il compilatore C++ utilizzato da Visual Studio non supporta C++ 0x, se questo è quello che chiedete. Ovviamente si può sempre usare un compilatore più recente se si desidera evitare l'aggiornamento a Visual Studio 2010 e/o Visual Studio 2012. Una possibile soluzione è compilare l'algoritmo di ottimizzazione stesso utilizzando un compilatore diverso e fare semplicemente riferimento all'output creato da detto compilatore . –
Le vostre librerie passano oggetti tra loro e si aspettano l'un l'altro per deallocarli?Il mixaggio della libreria potrebbe funzionare, ma ci sono alcuni avvertimenti piuttosto limitanti (e l'uso dei contenitori C++ può portare a una cattiva magia): http://stackoverflow.com/questions/6531401/how-to-use-vs2010-built-dlls-in -vs2008 - In breve, è più semplice se è possibile mantenere tutto coerente e utilizzare solo un runtime di C++. – birryree
Questo può essere utile quando si utilizzano i file #include di VS2010. Il che non funzionerà, VS2008 non può compilarli, specialmente dal momento che sei in cerca di miglioramenti perfetti alla semantica della mossa. –