Newsgroup: it.comp.programmare.win32
Titolo: DLL

Salve a tutti!
Avrei bisogno di informazioni riguardo la creazione di DLL in C/C++. Vorrei
usare il Borland (ma anche VC++ sarebbe beneaccetto, nonostante le
difficoltà nell'approccio). Qualcuno sa consigliarmi un sito su cui viene
spiegato quale codice aggiuntivo è richiesto ai miei programmi per creare
dll?
Grazie ni anticipo!

 wrote in message
news:nJ8S9.84884$Ou4.2...@twister2.libero.it...

http://www.codeguru.com/dll/index.shtml
http://www.codeguru.com/cpp_mfc/dill1.html
http://www.codeproject.com/dll/
http://www.flipcode.com/tutorials/tut_dll01.shtml
http://www.visualcomponentlibrary.com/bcb/dll.htm
http://www.functionx.com/visualc/applications/staticdll.htm
Purtroppo nulla di interessante in italiano!
Maurus



Con il compilatore Borland C++ 5.02a io faccio cosi' (letto su questo
stesso ng):
Prima dichiaro il tipo delle funzioni da esportare nella DLL:
#define MYAPI  __declspec(dllexport) __stdcall
Poi le funzioni vere e proprie:
void MYAPI MiaFunz(char *pippo)
Non ho messo mano su file .def
Personalmente la DLL cosi' creata la uso in Visual Basic dopo una
appropriata declare 
Private Declare Sub MiaFunz Lib "miadll" (ByVal pippo As String)
Ciao
--
Database Gate - The Powerful SQL Editor
HD Checker - The S.M.A.R.T. Hard Disk Reader
Asus Checker - CPU and Asus MB Checker
http://www.sgr.info

Grazie a tutti per l'aiuto! Mi siete stati utilissimi :)
P.S.: Ho provato col Borland digitando il codice suggerito... mi vengono
dati problemi durante la compilazione a causa del file .res; vabè ora ho
disinstallato e sto lavorando col VC++..... Grazie a tutti!!!!

Uffaaaaaaaaaaa.... sto provando a creare le DLL col VC++ ma da VB poi mi
dice che non è possibile trovare il punto d'ingresso.
Ho scritto anche la DllMain (anzi me l'ha scritta VC direttamente) ma niente
da fare.
Avete un esempiuccio a portata di mano, please? Anche una libreria che
SEMPLICEMENTE mi restituisca la somma di due interi passati alla
funzione......
Vi prego sto uscendo pazzo!!!!!
(Grazie a chi mi sopporterà anche questa volta!)

 wrote in message
news:GboS9.88807$TC5.2...@twister1.libero.it...

Ad uno degli indirizzi che ti ho gia' dato, c'e' un bell'esempio completo
commentato sul web ed in fondo alla pagina puoi addirittura fare il download
dell'applicazione con il sorgente!
http://www.flipcode.com/tutorials/tut_dll01.shtml
O stai cercando qualche altro esempio?
Maurus

 O stai cercando qualche altro esempio?
Non va bene perchè a me serve una DLL da richiamare da VB :(



Stessa esigenza che ho avuto io e che ho risolto nel modo descritto
nel mio reply precedente. A te non va ?
Stefano "HappyMan" (Lago Maggiore - NO)
--
http://www.sgr.info
Email happyman69 (at) 
libero.it

 nel mio reply precedente. A te non va ?
No, non mi va :( Il Borland mi dice che c'è stata una chiamata ad una
funzione pura virtuale (o una cosa simile) e si chiude da solo (l'infame).
Se hai un sorgente di libreria da te scritta per Borland me lo manderesti,
please?
Ovviamente vorrei il progettino, non solo il file .cpp sennò è probabile che
mi venga dato qualke errore. Quindi SE PUOI mandarmi la tua libreria ti
chiedo se per favore mi mandi il workspace.
Grazie infinite!!!
(Per inviarmi email togli NOSPAM dal mio indirizzo)

funzione pura virtuale (o una cosa simile) e si chiude da solo (l'infame).
'Spetta che ti do qualche info in piu' :-)
La DLL in oggetto l'ho compilata con il Borland 5.02a, che NON e' il
Borland Builder. In ogni caso questo non dovrebbe essere influente.
Lo e' invece se usi il VC, con quel compilatore avevo avuto qualche
problema nell'esportazione dei nomi delle funzioni.
Le istruzioni che ho scritto e che in fondo al post riscrivo sono in
un file .c e non .cpp !!
Non ci sono altri settaggi o file da smanettare, se non esplicitare
che il progetto e' una DLL :-))
Ecco il codice completo delle parti che servono (non fare caso
all'indentazione, ho tolto i tab e gli space), 
// file emf.c
#define STRICT
#include <stdio.h>
#include "windows.h"
#define MYAPI  __declspec(dllexport) __stdcall
BOOL WINAPI DllEntryPoint(HINSTANCE hInst,DWORD fdwReason,LPVOID
lpvReserved)
{
switch (fdwReason)
{
   case DLL_PROCESS_ATTACH:
      break;
 }
return TRUE;
}
void MYAPI MetafileSize(char *filename,RECT *rect)
{
HENHMETAFILE hMetaFile;
ENHMETAHEADER hHeader;
hMetaFile=GetEnhMetaFile(filename);
if (!hMetaFile)
   return;
GetEnhMetaFileHeader(hMetaFile,sizeof(hHeader),&hHeader);
CopyMemory(rect,&hHeader.rclFrame,sizeof(RECT));
DeleteEnhMetaFile(hMetaFile);
}
La compilazione nelle condizioni che ho descritto (compilatore, file
.c, progetto dll) DEVE funzionare, visto che a me va...non saprei che
altre info aggiungere altrimenti...
Ciao


Senti ho provato... ma:
1) Mi dice (quando decido di compilare per creare .a dll) che è impossibile
aprire il file .def;
2) Ho guardato le info sul compilatore e il mio è il Borland C++ 5.0 e non
5.02a. C'è un modo per upgradarlo? O devo necessariamente procurarmene uno
nuovo?

FUNZIOOOOOOOONAAAAAAAAAAAAAAAA!!!!
FUNZIOOOOOOOOONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!
Ho proprio eliminato il file .ref e ora compila tutto dandomi solo i
warnings riguardo le variabili che dichiaro e non uso!!!
FUNZIONAAAAAAAAAAAA!!!
Ti sarò debitore a vita :) :) :) :) :) :)
ODDIO NON CI CREDO! HO CREATO UNA DLL IN C!!! NON SO PERCHE' MA MI SENTO IN
CIMA A UNA VETTA :) :) :) :) :) :)
GRAAAAAAAAAAAAZIEEEEEEEEEEEEEEEEEE!!!

FUNZIOOOOOOOONAAAAAAAAAAAAAAAA!!!!
Mi sembra di percepire una lievissima soddisfazione :-)
Ciao !
Stefano "HappyMan" (Lago Maggiore - NO)
--
Personal Web 
http://www.sgr.info
Email happyman69 (at) 
libero.it