Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [VB.Net - VB6] Richiamare VB.Net da VB6: Errore

    salve a tutti,

    Ho creato una libreria di classi in vb.net, l'ho resa visibile a com, ho creato il file tlb tramite il comando RegAsm e ho importato la dll come riferimento in vb6.

    Quando creo l'oggetto della classe vb.net in vb6 però mi dà questo errore:
    Errore di Automazione
    Impossibile Trovare il file specificato

    come mai succede ciò? e come posso risolvere il problema?
    Allego il codice vb.net e come viene chiamato da vb6

    VB6:
    codice:
    Dim p As Comuni
    set p = New Comuni.Comuni
    VB.Net
    codice:
    Public Class Comuni
        Function CalcolaPiù(ByVal A As Int32, ByVal B As Int32) As Int32
            Return A + B
        End Function
    
        Function CalcolaPer(ByVal A As Int32, ByVal B As Int32) As Int32
            Return A * B
        End Function
    
        Function Calcolameno(ByVal A As Int32, ByVal B As Int32) As Int32
            Return A - B
        End Function
    
        Function CalcolaDiviso(ByVal A As Int32, ByVal B As Int32) As Int32
            Return Convert.ToInt32(A / B)
        End Function
    End Class
    L'assembly si chiama Comuni e la classe Comuni.
    Questa è solo una prova fatta in 5 minuti.

    grazie
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Come l'hai resa visibile a COM?

    Con quale comando (completo) hai registrato la tlb ?

    Se pressi F2 e visualizzi le informazioni sulla classe Comuni, cosa vedi ?

  3. #3
    Se premo (e non presso) F2 in vb6 vedo la classe comuni, che non contenente niente (nessun metodo ne proprietà)...

    Rendo l'assembly visibile a com nel senso che se tu nelle proprietà del progetto Pressi il bottone "Informazioni assembly..." c'è l'opzione "Rendi assembly visibile a COM".. l'opzione io l'ho pressata...

    Dimenticavo di dirvi che io ho Visual Basic .Net Express
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da andreaciao_22
    Se premo (e non presso)
    Non mi pare questo il problema di cui si discute ...

    F2 in vb6 vedo la classe comuni, che non contenente niente (nessun metodo ne proprietà)...

    Rendo l'assembly visibile a com nel senso che se tu nelle proprietà del progetto Pressi il bottone "Informazioni assembly..." c'è l'opzione "Rendi assembly visibile a COM"..
    Quello che devi fare e'

    Proprieta' del progetto

    riquadro Genera (o Compile)

    seleziona Register for COM Interop

    Crea nuovamente la libreria, registrala con le opzioni

    /tlb : nomefile.tlb NomeAssembly.dll Regasm/ il /codebase

    e usala in VB6 ...

    l'opzione io l'ho pressata...
    selezionata (non pressata) ...

  5. #5
    non funziona... primo mi dice che l'opzione /codebase va usata con progetti firmati. Ho creato la firma...

    Nelle proprietà del progetto io ho le seguenti voci:

    - Applicazione;
    - Compila;
    - Debug;
    - Riferimenti;
    - Risorse;
    - Impostazioni;
    - Firma

    Se io vado nella scheda Compila, non vedo nessuna voce che fa riferimento a Com Interop come da te citato, ma bensi se io vado in Applicazione, Informazione Assembly... Trovo una voce Rendi assembly visibile a COM, l'avevo già SELEZIONATA...

    Se ora vado in vb6 la classe non contiene nulla...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Questa e' la versione inglese ... ma in fondo dovresti trovare qualcosa di simile ...
    Immagini allegate Immagini allegate

  7. #7
    io non ce le ho le ultime due opzioni.

    Uso Visual Basic.Net Express
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In effetti nella Express non e' disponibile questa opzione per le Class Library.

    In questo caso la procedura e' (alcuni passi li hai gia' fatti) ...

    1) Da Proprietà del Progetto -> Applicazione -> Informazione Assembly seleziona Rendi assembly visibile a COM (lo avevi gia' fatto)

    2) Da Proprietà della Classe modifica le proprietà

    COM Class = True
    COM Visible = True

    3) Firma l'assembly da Proprietà del Progetto -> Firma -> Firma l'Assembly (con un nuovo file .snk, lo avevi gia' fatto)

    4) Fai il build della libreria

    5) Registra l'assembly e crea la type library con

    regasm.exe tualibreria.dll /tlb:tualibreria.tlb /codebase

    A questo punto dovresti poter lavorare con il VB6 ...

  9. #9
    Le Proprietà COM per la classe non esistono...

    Invece ho trovato, con la guida implementata in vb.net express, come creare il com senza partire dal modello Classe COM di vb.net, quello che in express manca, e ora è visibile a vb6...

    ecco il codice:

    codice:
     
    <ComClass(Comuni.ClassId, Comuni.InterfaceId, Comuni.EventsId)> _
    Public Class Comuni
        Public Const ClassId As String = "701AEC3E-9ECC-462c-9B5A-0788D5B23A28"
        Public Const InterfaceId As String = "C1427261-E94D-4191-902B-7DC8D3D634B2"
        Public Const EventsId As String = "2B4CAE96-A330-4d8c-B342-393D1361D1EC"
        Private intSec, intPrim As Long
        Public WriteOnly Property PrimoNumero() As Long
            Set(ByVal value As Long)
                intPrim = value
            End Set
        End Property
    
        Public WriteOnly Property SecondoNumero() As Long
            Set(ByVal value As Long)
                intSec = value
            End Set
        End Property
    
        Public Function CalcolaPiù() As Long
            Return intPrim + intSec
        End Function
    
        Public Function CalcolaPer() As Long
            Return intPrim * intSec
        End Function
    
        Public Function Calcolameno() As Long
            Return intPrim - intSec
        End Function
    
        Public Function CalcolaDiviso() As Double
            Return intPrim / intSec
        End Function
    
        Public Sub New()
            MyBase.New()
        End Sub
    End Class
    I tre GUID presenti nelle tre variabili pubbliche si ricavano con un programmino che si chiama GUIDGEN.EXE distribuito con Visual Basic.Net.
    Dopo aver creato tale classe lo registri col comando regasm e ti estrapoli il tlb.
    Lo metti come riferimento a vb6, e il gioco è fatto

    Per chi interessasse il Nome dell'articolo sulla guida, eccolo:

    Procedura dettagliata: creazione di oggetti COM con Visual Basic 2005

    Però ora ho un'altro problema...

    Appena provo a impostare una proprietà della classe fatta in vb.net da vb6, mi dice:

    ---------------------------
    Microsoft Visual Basic
    ---------------------------
    Errore di compilazione:

    Per la funzione o l'interfaccia sono state impostate delle restrizioni oppure la funzione utilizza un tipo di automazione non supportato in Visual Basic
    ---------------------------
    OK ?
    ---------------------------

    Cosa può essere?
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da andreaciao_22
    Le Proprietà COM per la classe non esistono...
    Ne sei sicuro? Non ho installato la Express ma ho informazioni affidabili circa l'esistenza di tali proprieta' per la classe ...

    Controlla nuovamente ...

    Però ora ho un'altro problema...

    Appena provo a impostare una proprietà della classe fatta in vb.net da vb6, mi dice:

    ---------------------------
    Microsoft Visual Basic
    ---------------------------
    Errore di compilazione:

    Per la funzione o l'interfaccia sono state impostate delle restrizioni oppure la funzione utilizza un tipo di automazione non supportato in Visual Basic
    ---------------------------
    OK ?
    ---------------------------

    Cosa può essere?
    VB6 pretende che i componenti COM supportino l'interfaccia duale ... probabilmente non e' cosi' per il componente COM creato in questo modo ...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.