Domanda

E 'possibile utilizzare una libreria statica C ++ (lib) compilato utilizzando Visual Studio 6 in Visual Studio 2008?

È stato utile?

Soluzione

Non dovrei perché non pensare - fino a quando si mantiene il solito limiti di memoria CRT (cioè se si alloca la memoria all'interno di una funzione di libreria, sempre libero dall'interno della biblioteca - chiamando una funzione nella lib per fare il liberazione).

questo approccio funziona bene per DLL compilate con tutti i tipi di compilatori, librerie collegate staticamente dovrebbe essere ok troppo.

Altri suggerimenti

Dipende. Fa il lib esporre solo 'extern 'C'' funzioni in cui la memoria o è gestita con metodi Win32 rette (CoTaskMemAlloc, ecc) oppure il chiamante non libera la memoria allocata dal chiamato o viceversa? Avete solo affidamento su librerie di base che non sono cambiati molto da quando VS 6? Se è così, si dovrebbe andare bene.

Ci sono 2 cose di base da tenere d'occhio. Modifiche a variabili globali utilizzate da librerie di terze parti, e le modifiche alla struttura del struct, classi, ecc definito da queste librerie 3rd-party. Ad esempio, la memoria allocatore CRT ha probabilmente cambiato le sue strutture di gestione nascosti ripartizione tra le 2 versioni, in modo da avere una versione della libreria allocare un pezzo di memoria e di avere un altro libero sarà probabilmente causare un crash.

Per fare un altro esempio, se si espone classi C ++ tramite l'interfaccia e si basano su MS librerie di runtime come MFC, c'è una possibilità che il layout classe è cambiato tra VS 6 e VS 2008. Ciò significa che l'accesso a un membro / campo la classe potrebbe andare la cosa sbagliata e causare risultati imprevedibili. Probabilmente stai hosed se il Lib utilizza MFC a qualsiasi titolo. MFC definisce internamente usa tonnellate di variabili globali, e qualsiasi accesso a variabili globali MFC dalle operazioni del Lib potrebbe causare errori se l'infrastruttura MFC è cambiato nell'attuale ambiente di hosting (che ha cambiato molto da VS 6, BTW).

Non ho esplorato esattamente ciò che sono state apportate modifiche nelle intestazioni MFC, ma ho visto un comportamento imprevedibile fra / binari classe ATL-based MFC compilati in diverse versioni VS.

Oltre a questi problemi, c'è un rischio per funzioni come strtok () che si basano su variabili globali statiche definite nelle librerie di runtime. Non sono sicuro, ma mi riguarda quelle variabili statiche non possono ottenere inizializzato correttamente se si utilizza un client aspetta il CRT a thread singolo su un thread creato sulla CRT multi-threaded. Guardate la documentazione per _beginthread () per ulteriori informazioni.

Sì. Non ci dovrebbero essere problemi con questo a tutti. Come gbjbaanb accennato, è necessario ricordare la memoria, ma VS2008 continuerà a funzionare con esso. Finché non si sta cercando di mescolare CLR, (gestito) del codice con esso. Mi consiglia contro che, se a tutto il possibile. Ma, se si parla di C crudo o codice C ++, certo, funzionerà.

Che cosa stai pensando di usare? (Cosa c'è in questa biblioteca?) Hai provato già, ma hanno problemi, o stai semplicemente controllando prima di sprecare un sacco di tempo cercando di ottenere qualcosa su cui lavorare che appena wont?

sicuro che funzionerà.

Stai chiedendo dove in VS2008 per codificare i riferimenti?

Se è così, andare proj puntelli -> Linker -> ingresso sulle proprietà di configurazione sulle pagine delle proprietà. Cercare "dipendenze aggiuntive" e codificare il .LIB lì.

Vai proj puntelli -> Linker -.> Generale e il codice il percorso librerie in "Ulteriori directory di libreria"

Questo dovrebbe farlo !!

Ci sono casi sono stati la risposta è no, quando ci siamo trasferiti da VS6 a VS2k5 abbiamo dovuto ricostruire tutti le nostre biblioteche, come il modello di memoria era cambiato, e le funzioni CRT dove diversa.

Ci sono stati una manciata di rottura modifiche tra VC6, VS2003, VS2005 e VS2008. Visual C ++ (in VS2005) fermato il supporto per la libreria a thread singolo, staticamente legata CRT. Alcune modifiche rottura enumerato qui e qui . Questi cambiamenti avranno un impatto l'utilizzo di librerie VC6 costruite nelle versioni successive.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top