Newsgroup: it.comp.lang.visual-basic
Titolo: [?] [.NET] Assembly --> ActiveX

Ciao a tutti,
Questa domanda è già stata posta su questi teleschermi, ma finora le
soluzioni date non mi hanno convinto.
La domanda è semplice: si può utilizzare un assembly .net come se fosse un
activex?
Cioè se io mi faccio in .net la mia bella pippo.dll che contiene la classe
pluto, posso in qualche modo usare da VB6 la classe pluto?
La risposta sembrerebbe essere "sì", quindi qualcuno mi può spiegare
passo-passo tutto quello che occorre fare?
Inoltre: è possibile compilare questo assembly in modo nativo in modo che
non sia necessario avere il framework installato?
Cioè avere una conversione completa .NET -> ActiveX?
Come?
Ciao e grazie.
--
Math Parser, VB.Framework : 
http://www.neodatatype.net
Sito Comune               : 
http://www.it-lang-vb.net

 Cioè avere una conversione completa .NET -> ActiveX?
In linea di massima no; C++ puo' compilare nativo, ma non so se per
l'interoperabilita' COM devi usare le managed extensions e quindi, di nuovo,
ti serve il framework.
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 non sia necessario avere il framework installato?
No, devi sempre avere il CLR installato
Per creare delle Assemblies consumabili da VB6 devi marcare con l'attributo
ComClass le classi che vuoi esportare, l'attributo  accetta dei GUID come
parametri (ClassID,InterfaceID,EventsID) creati questi 3 GUID con l'utility
guidgen (altrimenti VS li rigenera ogni volta...), dopodiche imposta il flag
"Register for COM interop" nelle proprieta' del progetto.
That'all...
HTH
-- 
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - 
http://www.ugidotnet.org

 pluto, posso in qualche modo usare da VB6 la classe pluto?
Ho sotto il testo Migrare da Microsoft Visual Basic 6 a Microsoft Visual
Basic .NET
Dd Robinson,......
Mondadori
Il cap. 9 intitola:
Usare VB6 con 
VB.NET
: COM Interop
Con esercizi passo-passo
Dopo il primo parziale esercizio incompleto ho deciso, se non si presentano
richieste assolute, di non mischiare le due tecnologie.
Il libro è presente, almeno a Roma, in molte librerie.
Uno sguardo penso aiuti di molto.
giuseppeD

 richieste assolute, di non mischiare le due tecnologie.
Hai ragione, ma voglio evitare di riscrivere una dll in .net e in VB6.
Se č possibile usarne una per tutti e due... :)
Ciao, per ora grazie a tutti, farň qualche prova.


 Se è possibile usarne una per tutti e due... :)
Per un perfezionista con i tipi
la vedo dura  ^__^
giuseppeD

 la vedo dura  ^__^
Perchč dici cosě? :)


 Perchè dici così? :)
E' mia impressione che costruire un'assembly dll solo con i tipi del
Framework e utilizzarla con VB6, sarà da sudare.
Ammettiamo di utilizzare l'assembly vb6 per costruire l'assembly dll da
utilizzare sia con VB6 che con .NET
Devo regredire.
Quindi nell'utilizzo in un proggetto .NET impiego del codice limitato e
superato.
Se devo concatenare delle stringhe, come mettersi ?
giuseppeD

 Devo regredire.
Non necessariamente... i tipi base di VB6 hanno una diretta corrispondenza
in .NET ad esclusione del Variant, tutto quello che concerne classi e
oggetti, inclusi gli insiemi, le strutture e gli enum, ha solo qualche
limitazione sopportabile (no metodi statici(shared), no costruttore con
parametri e costanti pubbliche... niente che non sia aggirabile facilmente)
Puoi addirittura invocare Windows Form fatte in .NET da VB6... insomma, io
ho fatto solo qualche prova, ma a livello di stesura del codice non devi
sottostare a grandi compromessi; paghi leggermente invece in termini di
prestazioni.


 prestazioni.
- La gestione dell'array di controlli è diverso
- Le stringhe a lunghezza fissa in .Net non sono più gestite.
- Il tipo Variant non esiste
- Per le Api ?
- Diversi, la memoria e la distruzione degli oggetti
- La cattura degli errori è diseguale
- l'istruzione Type è stata modificata
- Anche ADO posso utilizzarlo in ambe le due tecnologie. Rinuncio ad 
ADO.NET
?
- ecc.
Mia impressione che l'ottenibile non valga l'impresa.
Considerando che ne ho viste di tutti i colori può darsi che alcuni riescano
ad ottimizzare.
Il tentare, sicuramente, aggiungerà una conoscenza maggiore di VB6, per
giostrare devi effettivamente capire il funzionamento e la differenzazione
tra le due tecnologie.
giuseppeD

 Mia impressione che l'ottenibile non valga l'impresa.
Vediamo.
Faccio la prova e vedo cosa salta fuori.
Nella fattispecie se si riesce è tutto grasso che cola, non è indispensabile
che funzioni al 100%.
Ciao


 che funzioni al 100%.
A questo punto sei in gioco.
Il responso presumo interessi molti.
Il tutto va svolto su un proggetto serio,
possibilmente esistente con articolazioni e varietà di soluzioni di un certo
peso.
giuseppeD ^_^

 - Anche ADO posso utilizzarlo in ambe le due tecnologie. Rinuncio ad
ADO.NET
Non ci rinunci, perche' internamente ad A usi normalmente 
ADO.NET
, mentre
per B e' sufficiente che tu esponga (o rimappi tramite wrapper) le classi
che servono
Non sto dicendo che sia tutto rose e fiori, ovviamente il tuo componente
dovra' avere qualche accorgimento se vuoi la compatibilita' all'indietro,
pero' non e' che devi scrivere in .NET per forza in modo "limitato e
superato"... puoi sfruttare tutto quanto c'e' di nuovo; casomai sara' il
client VB6 che vedra' tutto alla vecchia maniera.


 un certo peso.
Addio zanna ! Penso che passerai molte notti insonni :p

 che servono
 Dim dap As New SqlClient.SqlDataAdapter("SELEC * FROM tabella", con)
Il sopra viene Wrappato per VB6 ?
Se devo compiere il lavoro una sola volta, anche il codice deve essere
scritto una sola volta per ambedue.
Se devo avere, per costruire un recordset due metodi, una per la tecnologia
A e una seconda per la B,
mio parere è meglio costruire due dll separate, ognuna con la propria .
Comunque attendiamo l'esperienza di Zanna
Salve
giuseppeD

 Mi manca qualcosa
Vedi sopra: stiamo parlando di due cose diverse


 funzionare con VB6 ?
Credo anch'io che tu ti stia confondendo.
Da come parli sembrerebbe che da VB6 non è possibile usare DLL scritte in
C/C++ solo perchè questi linguaggi hanno sintassi differenti.
Questo è palesemente falso.
Io non voglio convertire un progetto (cosa che ho già fatto, non solo VB ->
VB.NET
, ma VB -> C#) ma usare questo progetto .NET (una DLL) in VB come se
fosse un componente COM.
Che poi sia scritto in C#, 
VB.NET
, C++, PHP, BATch non ci interessa. :)
Ciao
