Newsgroup: it.comp.lang.visual-basic
Titolo: Vb.net e create/get object

Ciao a tutti,
    ho appena scaricato sharpdevelop e sto provando a fare qualche 
programmino con VB.net, ma ho un problema: non riseco a utilizzare le 
funzioni CreateObject e GetObject: coem mai? Da cosa sono state sostituite?
Grazie a tutti.
PS Qualcuno potrebbe indicarmi un buon manuale? Possibilmente 
gratuito...Grazie. 

 sostituite? Grazie a tutti.
Le funzioni esistono ancora, tali e quali, ma solo per interoperabilita' con 
componenti COM.
Se l'oggetto che vuoi creare e' un oggetto COM (per es. il caro vecchio 
"Excel.Application"), allora l'utilizzo e' praticamente invariato... se 
invece vuoi caricare dinamicamente dei componenti nativi .NET, dai un 
occhiata su MSDN ai vari metodi della classe Assembly nella namenspace 
System.Reflection
Un alternativa per usarli comunque "vecchio stile" sarebbe quella di 
registrare le tue classi .NET per l'utilizzo via COM, ma e' decisamente 
sconsigliabile se l'interazione e' .NET->.NET
Ciao
-- 
Luca Dormio
Sig.la srl - Via F. Crispi, 52 16030 Sori (GE)
Tel: 
+39 0185 709016
 - Fax: 
+39 0185 709062
 - e-mail: 
luca....@sig-la.com
 

 ha scritto nel messaggio 
news:d2h0qr$o2r$1...@balena.cs.interbusiness.it...


 gratuito...Grazie.
Gratis non cresce neanche la gramigna! (purtroppo non conosco la risposta).
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 può sembrare una domanda stupida, ma è la prima volta hce vedo 
vb.net
.
[SNIP]
Preso pari pari da MSDN, nella pagina relativa alla funzione CreateObject
Sub TestExcel()
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
    xlBook = CType(xlApp.Workbooks.Add, Excel.Workbook)
    xlSheet = CType(xlBook.Worksheets(1), Excel.Worksheet)
    ' Place some text in the second row of the sheet.
    xlSheet.Cells(2, 2) = "This is column B row 2"
    ' Show the sheet.
    xlSheet.Application.Visible = True
    ' Save the sheet to C:\Test.xls directory.
    xlSheet.SaveAs("C:\Test.xls")
    ' Optionally, you can call xlApp.Quit to close the work sheet.
End Sub
anche in versione "simil VB6", impostando Option Strict Off
Sub TestExcel()
    Dim xlApp As Object
    Dim xlBook As Object
    Dim xlSheet As Object
    xlApp = CreateObject("Excel.Application")
    xlBook = xlApp.Workbooks.Add
    xlSheet = xlBook.Worksheets(1)
    xlSheet.Cells(2, 2) = "This is column B row 2"
    xlSheet.Application.Visible = True
    xlSheet.SaveAs("C:\Test.xls")
End Sub
provati entrambi senza problemi, con 
VS.NET
 Enterprise
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 ha scritto nel messaggio
news:3b2dojF...@individual.net...

Come ti diceva Luca COM è una pessima via da adottare in .Net.
Se non puoi farne a meno forse la soluzione migliore, anche se un po' più
scomoda è l'uso di una classe wrapper come questa (ottenuta modificando un
esempio Microsoft trovato su 
support.microsoft.com
)
E' in C#, ma con #D puoi facilmente convertirla in VB.Net se ti trovi più
comodo.
Ciao
-----------
using System;
using System.Reflection;
using System.Runtime.InteropServices;
namespace MyNeoReport
{
 class ComObject : IDisposable
 {
  private Type _type;
  private object _obj;
  public ComObject(string progId) : this(Type.GetTypeFromProgID(progId,
true))
  {}
  public ComObject(Type t)
  {
   if (t == null) throw new ArgumentNullException("t");
   _type = t;
   _obj = Activator.CreateInstance(t);
  }
  public ComObject()
  {
   _obj = null;
   _type = null;
  }
  ~ComObject()
  {
   this.Dispose();
  }
  public object Object
  {
   get { return _obj; }
   set
   {
    this.Dispose();
    _obj = value;
    if (_obj != null)
     _type = _obj.GetType();
   }
  }
  private object GetReturnObject(object obj)
  {
   if (obj.GetType().IsCOMObject)
   {
    ComObject comObj = new ComObject();
    comObj.Object = obj;
    return comObj;
   }
   else
    return obj;
  }
  public override string ToString()
  {
   if (_type != null)
    return base.ToString() + ":" + _type.ToString();
   else
    return base.ToString() + ":null";
  }
  public object Invoke(string methodName, params object [] args)
  {
   ThrowIfDisposed();
   return GetReturnObject(_type.InvokeMember(methodName,
                     BindingFlags.InvokeMethod,
                  null, _obj, args));
  }
  public object this[string propertyName]
  {
   get
   {
    ThrowIfDisposed();
    return GetReturnObject(_type.InvokeMember(propertyName,
                BindingFlags.GetProperty,
                null,
                _obj,
                null));
   }
   set
   {
    ThrowIfDisposed();
    _type.InvokeMember(propertyName, BindingFlags.SetProperty,
     null, _obj, new object[]{value});
   }
  }
  private void ThrowIfDisposed()
  {
   if (_obj == null) throw new ObjectDisposedException(GetType().Name);
  }
  public void Dispose()
  {
   if (_obj != null)
   {
    if (_type.IsCOMObject)
    {
     while (Marshal.ReleaseComObject(_obj) > 0);
    }
    else if (_obj is IDisposable) ((IDisposable)_obj).Dispose();
    _obj = null;
   }
  }
 }
}
--
Reporting tool: 
http://www.neodatatype.net