Jeśli poprosisz o inny sposób łączenia bibliotek 2008 i 2010 w jednym pliku wykonywalnym innym niż przenoszenie części 2010 poza biblioteką DLL, to prawdopodobnie odpowiedź jest "nie ma innego prostego sposobu na osiągnięcie tego celu".
Ale jeśli nie chcesz "VC++ 2010 biblioteki uruchomieniowe ... pod VS 2008" (czyli budowanie przeciwko bibliotekom 2010 w starym IDE 2008), ale "używaj skompilowanej 2010 DLL w twoim 2008 skompilowany program ", jest to całkowicie możliwe.
Najłatwiejszym sposobem, jak to robimy w naszych projektach, jest skompilowanie (zarówno .exe, jak i DLL) przeciwko statycznie połączonym bibliotekom standardowym (MFC, jeśli go używamy), a następnie użycie LoadLibrary
w .exe do załadowania DLL. W bibliotece DLL możesz wyeksportować (_declspec (dllexport)
) funkcję (najlepiej wewnątrz strażników extern "C" {}
) i użyć jej w rozszerzeniu .exe do GetProcAddress
.
Łącza statyczne i jawne ładowanie pozwalają uniknąć wielu niespójności spowodowanych przez różne środowiska wykonawcze.
Jeśli martwisz się o ładowanie bibliotek DLL i koszty połączeń funkcjonalnych, możesz spróbować uczynić te połączenia tak rzadkimi, jak to tylko możliwe (być może poprzez przeniesienie nie tylko algorytmu, ale także więcej logiki wysokiego poziomu do biblioteki DLL). Zobacz też this issie.
I możesz zbudować cały swój kod w jednym IDE (2010) używając native multitargeting (jednak będziesz musiał zbudować główną aplikację i bibliotekę DLL oddzielnie, odpowiednio dla bibliotek v9 i v10).
C++ kompilator używany przez Visual Studio nie obsługuje C++ 0x, jeżeli jest to, o co prosicie. Oczywiście zawsze możesz użyć nowszego kompilatora, jeśli chcesz uniknąć aktualizacji do Visual Studio 2010 i/lub Visual Studio 2012. Jednym z możliwych rozwiązań jest skompilowanie samego algorytmu optymalizacji za pomocą innego kompilatora i po prostu odwołanie się do danych wyjściowych utworzonych przez ten kompilator. . –
Czy biblioteki przekazują obiekty między sobą i oczekują wzajemnej alokacji?Pomieszanie bibliotek może zadziałać, ale istnieją pewne ograniczone ograniczenia (i używanie kontenerów C++ może prowadzić do złej magii): http://stackoverflow.com/questions/6531401/how-to-use-vs2010-built-dlls-in -vs2008 - krótko mówiąc, łatwiej jest zachować spójność wszystkich danych i używać tylko jednego środowiska wykonawczego C++. – birryree
To może się dobrze skończyć, gdy używasz plików #include z VS2010. Co nie zadziała, VS2008 nie może ich skompilować, zwłaszcza, że jesteś po ulepszeniach semantyki perf. –