Newsgroup: it.comp.lang.c++
Titolo: DLL con Visual C++ 4.1

>>>> 
http://www.geocities.com/sunsetstrip/stage/7787
 <<<<<<
<<<<<<<<<<<<<<<< _
Metal...@iol.it
 >>>>>>>>>>>>>>>>>

.DEF ma non so in che modo... (mi fate un esempio?).
Esportare funzioni C++ da .DEF e` un macello; meglio se mai etichettare
la classe come __declspec(dllexport).  Comunque se quello che esporti
non e` extern "C" (o presentato attraverso COM) sara` difficile accedervi
se non da clienti scritti con lo stesso compilatore C++.
Alex

.DEF ma non so in che modo... (mi fate un esempio?).
esportare classi da una DLL e' un po' complicato soprattutto tramite
un .DEF (meglio usare __declspec(dllexport)). Inoltre e' strettamente
legato non solo al tipo di compilatore ma anche alla sua versione. Ad
esempio passando dal VC 4.2 al 5.0 ci sono state delle modifiche nella
decorazione dei nomi. 
Per cui di solito da una DLL e' meglio esportare esclusivamente
funzioni globali dichiarate come: extern "C"
In pratica per un programma esterno e' come se la DLL fosse scritta in
C, in questo modo le funzioni dovrebbero essere accessibili da
qualunque programma.
Gianpaolo Bottin
- Live Long and Prosper -

sviluppo COM ci vuole un pochetto per imparare a farlo bene...!
sapresti indicarmi qualche indirizzo sul Net dove trovare qualche info,
tutorial o esempi sull'argomento?
c ya!
/\/\etal Dave
(togliere gli asterischi dall'indirizzo per rispondermi)

tutorial o esempi sull'argomento?
Per cominciare, io partirei dalle ultime 5 column del "DrGUI" su MSDN
news.  URL: 
http://www.microsoft.com/msdn/
, poi segui le istruzioni...
ci sono altri tutorial COM in rete, ma questo, almeno per l'inizio (le 5
parti sinora apparse) sembra assai ben fatto.  Accanto alle risorse del
sito Microsoft, puo` interessare qualcosa di quello che appare su ATL,
su 
http://www.worldofatl.com/
 per esempio (ATL, l'Advanced Template
Library, e` l'ultima idea Microsoft su come implementare al meglio,
soprattutto con efficienza, ma anche con facilita`, programmi COM).
Anche con l'help in linea del VC++5.0 qualcosa c'e` su COM e ATL,
a proposito.
Per "fare sul serio", studierei a fondo "Essential COM" di Don Box.
Ma non e` disponibile in rete...:-).  E` un libro Addison-Wesley.
Alex

qualunque programma.
Magari!
Ho una DLL il cui codice è SOLO il seguente:
extern "C" __declspec(dllexport) int _stdcall CippaLippa(int A)
{
    return 1;
}
Compilo con C++ Builder e ... a random
DLL entry point not found for CippaLippa  oppure   la funzione
restituisce 0.
La funzione viene chiamata da Visual Basic e dà i problemi di cui
sopra se eseguo il .EXE generato. Se invece eseguo il programma
visual basic dall'interno dell'IDE  mi dice qualcosa a proposito
del Tipo di chiamata non valido (non ho qui il compilatore
sotto mano, scusate).
Oh, in Visual Basic è dichiarata così
private function CippaLippa lib "Cippa" (byval A as Integer) as Integer
Un grazie a chi mi darà qualche dritta.
Ciao e buon week-end

...

Non conosco il VB, ma so che un intero in C/C++ in ambiente a 32 bit e' anch'esso a 32
bit.
Prova a dichiarare il parametro ed il ritorno come Long (o come si chiama) in VB.
Accidenti, ho riletto meglio quel che avevi scritto. Hai inserito la entry point?
Il codice piu' o meno e' questo (dal BC++ 5.02)
#if defined(__WIN32__)
BOOL WINAPI
  DllEntryPoint(HINSTANCE h, DWORD /*flag*/,LPVOID)
#else
  int FAR PASCAL LibMain(HINSTANCE h, uint16,uint16,char far*)
#endif
  {
// se devi fare qualcosa di particolare
// .........
  return TRUE;
  }
int FAR PASCAL WEP (int /*nParameter*/)
{
  return(1);
}
Ciao
Nazzareno
--
Automatic posted from [195.31.255.3]
via Mailgate Server - 
http://www.mailgate.org