Domanda

Quando creo una DLL con Visual C ++ 2008 ho un paio di scelte. Posso creare una " Class Library " , che comprendo in realtà mi darà una libreria .Net che utilizza l'estensione CLI (gestita) di C ++.

Dato che non lo voglio, e ho pensato che avessi bisogno di un file .LIB statico per il collegamento in un altro progetto eseguibile di Windows di Visual C ++, ho scelto invece "Progetto Win32". e, nel pannello Impostazioni applicazione, specificare una DLL C ++ (no MFC).

Questo creerà un progetto con un file .cpp che dovrebbe essere dove definisco " le funzioni esportate per l'applicazione DLL " .

Anche questo non sembra essere quello che voglio. Fondamentalmente, quello che sto cercando è l'equivalente C ++ nativo di quello che sarebbe, in C # .NET, un assembly di libreria di classi. Voglio impacchettare alcune classi in una DLL, quindi un progetto .EXE usa le classi della DLL includendo i file di intestazione del progetto DLL e collegandoli con un .LIB per risolvere i riferimenti.

Qual è il solito modo di farlo?

È stato utile?

Soluzione

Lo stai facendo bene. Ciò di cui hai bisogno è di contrassegnare le tue classi con __declspec (dllexport) per renderli disponibili al di fuori del progetto. Quando compili il progetto, genererai sia un .DLL che un .LIB.

Altri suggerimenti

  • Crea un nuovo progetto
  • Visual C ++: Win32: Progetto Win32
  • Impostazioni applicazione selezionare DLL e selezionare "Esporta simboli "

Quando si genera il progetto, verrà eliminata una classe esportata, in genere denominata C {MyLib}.

Hai ragione a creare una DLL C ++ (no MFC). Puoi creare le tue classi e quei punti di accesso che definisci verranno esportati da quella DLL per essere utilizzati da altro codice C ++ (ad esempio, un'applicazione Win32 scritta in C ++).

Dato che i nomi C ++ vengono automaticamente modificati dal compilatore in valori strani e meravigliosi, non è pratico esportarli come se i client della DLL fossero, ad esempio, programmi C. Ma se tutto è in C ++, dovresti essere OK.

Se crei alcune classi, puoi scegliere di collegarle dinamicamente (come una DLL) ma avrai bisogno di una libreria di importazione (creata automaticamente per te) che contenga le definizioni dei simboli della DLL. Puoi anche scegliere di collegare staticamente al tuo codice da un'applicazione - in questo caso finiresti con una libreria statica (anche un .LIB) che contiene il codice oggetto effettivo nelle tue classi anziché i simboli in una DLL.

Il vantaggio di una DLL è, ovviamente, che se si scrivono più applicazioni utilizzando la propria libreria, possono condividere tutte la DLL; con una libreria statica, contengono ciascuna una copia del codice della libreria.

Penso che questo articolo descriva cosa stai cercando di fare: http://www.codeproject.com/KB/mcpp/usingcppdll.aspx

Personalmente preferisco anche esportare le funzioni C (al contrario di C ++) dove esplicito questo puntatore per evitare di preoccuparmi della decorazione del nome del metodo specifico del compilatore e di esporre le funzioni generate dal compilatore.

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