Newsgroup: it.comp.lang.c++
Titolo: Come si crea una dll con VisualC++?

Ciao, è la prima volta che scrivo su questo news group, e vorrei porre
una domanda che è già stata posta ma di cui non ho potuto leggere la
risposta.
Vorrei creare una dll usando visual c++ (preferirei usare i
compilatori della Borland, che mi piacciono di piu', ma il professore
mi ha espressamente detto di usare il visual c++ della Microsoft).
Ho provato a leggere la documentazione, ma sinceramente non ci ho
capito molto. Quello che vorrei fare mi sembra semplice, ma il
compilatore continua a darmi un sacco di errori.
Dunque, vorrei creare una dll di estensione MFC, contenente una
classe. Vorrei esportare la classe (usando AFX_EXT_CLASS, credo si
faccia così) in modo che un programma esterno possa chiamare tutti i
metodi pubblici di questa classe.
Qualcuno potrebbe dirmi in due parole quali sono le operazioni da
fare, magari con un esempio semplice? Non avete idea di quanto vi
sarei grata.
Lisa.

Lisa.
Forse è un po' assurdo, ma siccome sono riuscita a risolvere il
problema per conto mio, posto comunque la risposta che avevo
richiesto: chissà che possa fare comodo a qualcuno dopo di me?
Premetto che non ho idea se questo mio sistema è il più efficiente o
se ha delle tremende controindicazioni.
1) Creo un nuovo progetto MFC AppWizard (EXE)
2) Dal menu File/New aggiungi un MFC AppWizardd (DLL) (dalla linguetta
Project) avendo cura di selezionare Add to current Workspace
3) E' importante nella successiva schermata selezionare MFC Extension
DLL (Using shared MFC dll); in questo modo la dll che creerai potrà
esportare intere classi, e non solo funzioni;
4) Dal menu Build/Set active project, seleziona l'eseguibile;
5) Adesso, nel tuo Workspace si trovano 2 progetti: la dll e
l'eseguibile che la utilizzerà. All'interno del progetto della dll
puoi costruire tutte le classi e le risorse che vuoi. Quando vuoi che
una classe venga esportata nella dll (e quindi sia utilizzabile
dall'eseguibile), basterà che nella sua intestazione tu aggiunga la
macro AFX_EXT_CLASS, come nell'esempio successivo:
class AFX_EXT_CLASS nome_classe_da_esportare 
{
}
Per quanto riguarda la dll, non c'è assolutamente niente altro da
fare.
6) Per fare in modo che l'eseguibile possa accedere alla classe
esportata, basta fare 3 passaggi semplicissimi:
1. Includere l'header della classe esportata (attento al path! Quel
file si trova all'interno di un'altra cartella, che ha il nome del
progetto della dll)
#include "nome_dll/nome_classe.h"
2. Aggiungi al progetto dell'eseguibile il file .lib creato dalla
compilazione della dll (il .lib contiene i riferimenti per la chiamata
delle funzioni della dll). Per fare questo, usa Project/Add to
Project/Files e, scegliendo Mostra tutti i file, seleziona il file
nome_dll.lib
3. Sposta il file nome_dll.dll nella stessa cartella dell'eseguibile o
in c:\windows\system, altrimenti riceverai un messaggio di errore in
runtime.
Adesso puoi eseguire il programma.
Note: quando modifichi la dll, devi ricordarti di riaggiornare il file
nome_dll.dll, copiandolo nuovamente dentro la cartella che contiene
l'eseguibile, altrimenti quest'ultimo continuerà ad utilizzare la
vecchia versione. Se vuoi compilare solo l'eseguibile o solo la dll,
da File view, clicca col destro sul nome del progetto e scegli Build
(selection only).
Spero che possa servire a qualcuno! A me mi ha fatto impazzire per una
settimana.
Lisa.