Newsgroup: it.comp.programmare.win32
Titolo: Creazione di una dll

Ciao a tutti ho un disperato bisogno d'aiuto!
Ho un programma eseguibile scritto in C che devo trasformare in una dll per
poterla poi usare in un'applicazione VB6. Il problema č che non so da dove
cominciare a scrivere la dll!!!
Qualcuno č cosě gentile da potermi spiegare come posso fare tutto ciň e come
fare, una volta fatta la dll, ad importarla dall'applicazione VB?
Grazie a tutti!!

fare, una volta fatta la dll, ad importarla dall'applicazione VB?
Non conosco VB, ma non dovrebbe essere troppo complicato.
--
Andrea Laforgia (ICQ 87230455)

Il compilatore č quello Microsoft, Visual C++ 6.0!
ciao

fare, una volta fatta la dll, ad importarla dall'applicazione VB?
Oddio, se non fosse che non ho ancora finito di sistemare la nuova
versione direi "Leggi le FAQ", ma devo aspettare fino a domani.
Comunque controlla 
www.programmazione.it
-- 
DGP85
http://daps.cjb.net/
Don't change the address.
No Binaries or HTML at this address.

Già fatto ma anche se provo a usare l'esempio che ho trovato nel sito lo
compilo, creo la dll ma niente quando la chamo da VB mi appare sempre lo
stesso errore!!
Invece se uso la dll già creata da loro che si trova nello zip tutto
funziona regolarmente!! :-( come è possibile?
Ciao


Ci sono 2 casi:
1) crei una DLL COM (che ti sconsiglio se non sai piu' che bene cosa stai
facendo)
2) crei una DLL standard (e richiami le sue funzioni come fossero le API di
windows) con il vantaggio che non usi ne' MFC (grosso e con problemi di
compatibilita') o ATL (difficile)
Visto che usi il VC 6.0:
crea un nuovo progetto DLL (Dynamic Link Library) cosi' il wizard ti crea le
funzioni standard
crea una funzione con questo prototipo:
extern "C" long WINAPI prova(long numero)
crea un file nomeprogetto.def che contiene
LIBRARY   DLL_C
;DESCRIPTION
EXPORTS
 prova
e includilo conme fosse un file del sorgente (deve comparire insieme ai tuoi
.cpp o .c)
fatto questo puoi richiamare la funzione da Basic dichiarandola come fosse
una API:
Declare Function prova Lib "nomedll.dll" (ByVal numero As Long) as long
Comunque fatti un giro sul sito della microsoft su MSDN c'e' tutto e di
piu': basta saperlo trovare
Ciao Giacomo

 writes:
S> Il compilatore è quello Microsoft, Visual C++ 6.0!
Accedo tardi al gruppo.
Dunque, col C++ della MS c'è un wizard che ti costruisce lo scheletro,
ma non funziona (almeno da me). Il problema è che i nomi non vengono 
generati come atteso dal chiamante (nemmeno facendo il tester in VB6).
Per capire  come funzionano le DLL  consiglio "Programmazione Avanzata
In Windows"  di J. Richter o il  Petzold (ma il secondo  mi piace meno
nonostante sia osannato).
Per farti la dll il i sorgenti devono prevedere la chiamata DllMain()
(vedi documentazione MS)
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch(ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    }
    return TRUE;
}
poi lascia pure le definizioni delle funzioni invariate
int foo(int bar)
{
	return 0;
}
char *bar(char *foo)
{
	return NULL;
}
e sopratutto aggiungi il file di definizione (.def) 
%cat test.def
; pwd.def : Declares the module parameters for the DLL.
LIBRARY      "FooBar"
DESCRIPTION  'FooBar Windows Dynamic Link Library, replaces foobar OCX'
EXPORTS 
	foo		@1
	bar		@2
La parte importante è la exports, dove vengono definiti i simboli che
compariranno nel .lib e nel .exp.
La  prima  colonna contiene  i  simboli  (funzioni)  da esportare,  la
seconda l'ordinale della funzione  (se non ricordo male conta l'ordine
di definizione).
(folklore : Ho appena rimpiazzato un OCX in VB con del codice C :) )
+----------------------------------------------------------------+
| Gian Uberto Lauri * "So, are you working on fixing that bug    |
| 
sa...@eng.it
      *  *now* or leaving it until later ?" - YES  |
+----------------------------------------------------------------+
| Attenzione: rispondo ad ogni invio di pubblicità non richiesta | 
| o spam di qualsiasi altro genere con un messaggio al provider  |
| di competenza. Ai sensi della legge sulla privacy NON avete il |
| permesso di utilizzare i miei dati per questi scopi.           |
+----------------------------------------------------------------+

 writes:
S> Già fatto ma anche se provo a usare l'esempio che ho trovato nel sito lo
S> compilo, creo la dll ma niente quando la chamo da VB mi appare sempre lo
S> stesso errore!!
S> Invece se uso la dll già creata da loro che si trova nello zip tutto
S> funziona regolarmente!! :-( come è possibile?
L'errore è  che non  trova la  funzione ? Qui  mi sa  che il  c++ name
mangling colpisce ancora.
