Newsgroup: it.comp.programmare.win32
Titolo: scrivere dll in c++

Salve a tutti,
sto scrivendo un'applicazione in Visual Basic. Poiché in determinati punti
di quest'applicazione devo fare un grande abuso di API, ho ritenuto giusto
scrivere una DLL in c++ (cioè nel linguaggio nativo delle API) che faccia
tutte le mie operazioni con le API per poi restituire un intero
all'applicazione VB.
Essendo pratico di C, ma non di C++ (quindi non della programmazione ad
oggetti di C++), volevo sapere se era possibile scrivere delle DLL in c++
che non necessitano di una classe per funzionare.
Infatti quando avvio visual c++ e scelgo di costruire un progetto DLL, già
lui mi dichiara una classe e il suo costruttore. Ho provato a scrivere
nella classe le mie funzioni, il progetto compila tutto ma in VB non
riesco ad usarle con Declare... etc.
Sapete dirmi qualcosa in proposito?
Grazie in anticipo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Marco scrive:
<<<Essendo pratico di C, ma non di C++ (quindi non della programmazione ad
oggetti di C++), volevo sapere se era possibile scrivere delle DLL in c++
che non necessitano di una classe per funzionare.>>>
Secondo il mitico Bruce Eckel è impossibile scrivere una dll come vorresti
fare tu...i motivi sono milioni di milioni.
Un consiglio (stò imparando anch'io il c++) :
il c++ non è altro che un estensione del c, e tutto il codice originale del
c risiede nel c++.Programmare in c++, usando l'OOP, semplifica solo la vita
grazie alle sorgenti riutilizzabili.Come esempio di tutte quelle dll già
compilate e pronte per essere usate.
Dire io sono pratico in c ma non in c++ vuol dire che si ha la testa piena
di confusione e che si dovrebbe studiare su qualche buon libro.
--
Il mondo può migliorare solo grazie a te.
By Hanonimo  ®
^_^   
http://www.google.co.jp/
   ^_^

 di confusione e che si dovrebbe studiare su qualche buon libro.
Perché? Il C++ ha talmente tante cose diverse dal C che è normalissimo
conoscere il C e non capire niente di C++. Nel C++ ad esempio non ci sono
classi (con tutto ciò che si portano dietro), template, la libreria
standard C++ (contenitori, algoritmi, stream...), eccezioni e molto altro.
-- 
Marco Barisione
http://spazioinwind.libero.it/marcobari/

 di confusione e che si dovrebbe studiare su qualche buon libro.
Semplicemente vuol dire che ho imparato ad usare il C (linguaggio che non
è nativo ad oggetti), ma non la programmazione ad oggetti in C++. Ad
esempio, faccio programmazione in C con sistemi UNIX (anche a livello
piuttosto basso) e, mi spiace, ma la conoscenza di C ce l'ho e per niente
confusa. Non me ne puoi fare una colpa se non conosco il C++, a tal
proposito che libro mi consiglieresti?


Hai ragione Marco, ho esagerato.Scusa.


"Pansare al c++" di Bruce Eckel ... per questo libro ci vuole una conoscenza
media del linguaggio C.


 Salve a tutti,
ti do la base per partire a fare una dll in c almeno non devi rivederti
tutto il C++ ;-) (sono i template del dev prendili come esempio)
ti da gia la struttura per creare la dll, poi tocca a te comppletare la
struttura.
ciao
dll.h
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT void HelloWorld (void);
#endif /* _DLL_H_ */
dll.c
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
DLLIMPORT void HelloWorld ()
{
    MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being
called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;
      case DLL_PROCESS_DETACH:
        break;
      case DLL_THREAD_ATTACH:
        break;
      case DLL_THREAD_DETACH:
        break;
    }
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}


puoi puoi, eccome se puoi...
sul petzold c'e' qualche esempio, e' solo un approccio, pero' penso che ti
possa bastare....

 media del linguaggio C.
Grazie mille!


 ^_^   
http://www.google.co.jp/
   ^_^


 fare tu...i motivi sono milioni di milioni.
Grande cavolata!! ...per di piu' attribuirla al grande Bruce Eckel?!??!
Puoi tranquillamente fare una DLL in C++ senza usare classi! :)
D.

 che non necessitano di una classe per funzionare.
Puoi farlo tranquillamente. Se ritieni di non avere bisogno degli 
oggetti o di feature particolari del C++, sviluppa pure la DLL in C!
Inoltre, se tu dovessi sviluppare delle funzioni in C++ da esportare, ti 
consiglio comunque di usare la specifica "extern C", cosi' eviti il 
"fastidioso" fenomeno del name-mangling.
Attenzione che, se vuoi sviluppare una DLL con "oggetti" per poterli 
usare da Visual Basic, devi usare OLE! (...anche se mi pare di capire 
che non e' questo il tuo caso).
Happy coding
D

 - Sito Web

 oggetti come VB.
Per quel che ne soi io (ma le mie conoscenze sono limitate!), cio' non 
e' possibile, a meno che non sviluppa oggetti OLE Automation (o ActiveX, 
come si chiamano...)...che e' cosa ben piu' complessa che sviluppare 
oggetti C++ "puri". Forse le MFC danno una mano a riguardo...
Bye
Danguard

 media del linguaggio C.
ehm veramente era "Pensare IN c++"...