Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Invocare oggetti .NET da COM

    Prendendo spunto da questa interessante domanda: http://forum.html.it/forum/showthrea...hreadid=916784 ho fatto qualche prova ma ho dei problemi.

    1) Voglio invocare oggetti .NET da COM (visual basic 6 o asp).

    2) Creo la classe con VisuaStudio 2003.

    3) Sposto le dll generate nella directory dove risiede l'IDE di visual basic 6

    4) registro con REGASM la dll generando il file .tlb

    5) a questo punto apro visual basic, aggiungo il riferimento alla dll e collaudo:
    se metto:
    codice:
    Dim j as Variant
    Set j = CreateObject("SampleNetComponent.NetComponent")
    Me.Label2.Caption = j.NumberToLiteral(Me.Text1.Text)
    FUNZIONA PERFETTAMENTE

    Se metto invece
    Dim j As New SampleNetComponent.NetComponent

    non riesco neanche a compilare perchè ricevo questo errore:
    Per l'interfaccia sono state impostate delle restrizioni oppure la funzione utilizza un tipo di automazione non supportata da Visual Basic

    Non credo di essere OT perchè sto cercando di riutilizzare classi create per progetti asp.net, da pagine ASP o comunque da un qualunque codice unmanaged.
    Pietro

  2. #2
    Ti premetto che non conosco Visual Basic 6.
    Una volta creato l'assembly con Visual Studio .NET 2003, hai poi utilizzato il tool tlbexp.exe per generare la libreria di tipi che descrive l'assembly .NET?
    Una cosa del tipo tlbexp yourAssembly.dll /oututputLibrary.tlb.

    Hai poi rispettato le specifiche?
    Riporto da gotdotnet.it:

    [list=1][*]Il tipo gestito (classe, interfaccia, struttura o enum) deve essere public.[*]Si consiglia di fare in modo che la classe implementi un'interfaccia in modo esplicito, anziché esporre l'interfaccia della classe, che contiene tutti i membri della classe e delle relative classi base.[*]I membri del tipo ai quali si accederà da COM dovranno essere membri di istanza public, non static. I membri privati, protetti, interni e static non sono accessibili.[*]Per creare il tipo da COM, è necessario che esso contenga un costruttore public predefinito (senza parametri).[/list=1]
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: Mi riesce abbastanza difficile seguirti data la mia ignoranza in materia. Ti dico cosa ho fatto dopo aver letto la discussione su citata.

    Ho usato Visual Studio 2003 per creare un progetto di tipo COM class che genera una dll visibile ai client COM

    Nella classe ho un solo metodo di prova, pubblico, che usa una vecchia libreria .NET usata in applicativi web. Nella compilazione, VisualStudio si occupa pure della registrazione e della creazione del file .tlb


    Ho fatto adesso una pagina ASP che referenzia la classe .NET e ripeto, funziona perfettamente. Ho fatto pure la prova di collegarmi al mio computer da un altro della rete aziendale, e funziona

    La mia curiosità era: perchè funziona solo con l'latebinding e non con l'earlybinding?

    e visto che vedo che te ne intendi, come si crea firma un assembly? ossia, come si utilizza questa istruzione:

    <Assembly: AssemblyKeyFile("c:\codearchitects.snk")>

    ossia, come si genera il file .snk?


    Ciao
    Pietro

  4. #4
    Veramente, di interoperabilita' COM me ne intendo davvero poco dal momento che non ho mai avuto necessita' (fortunatamente) di avventurarmi in quella giungla!
    I concetti che ho espresso, sono reminiscenze della lettura di un libro di testo.

    Tornando al tuo problema, stai lavorando localmente oppure vuoi inserire l'assembly all'interno della GAC? (Te lo chiedo perche' mi hai posto il quesito sulla firma dell'assembly e quindi ho supposto che tu necessitassi di uno strong name).

    Ti fornisco comunque un link che tratta ampiamente l'argomento: COM Interop Exposed

    Spero di esserti stato di aiuto.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ti ringrazio, ciao
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.