ComClass

27/01/2006 - 14:32 por Juan Miguel | Informe spam
Hola a todos!!
Estoy desarrollando una clase .NET en la que me exigen que se pueda utilizar
en VB6 y ASP, es decir, que tengo que hacer un objeto COM.
Tengo desarrollada la clase .NET, y habia pensado en utilizar una ComClass
que te ofrece Visual Studio .NET.
Pero me he encontrado con dos problemas:

1) Creo una ComClass sencilla mediante la plantilla en la que hay una
propiedad de solo lectura que me devuelve un texto. Genero la CommClass y me
voy al VB6 y añado la referencia al fichero .tlb y me da Error de
automatizacion cuando intento mostrar con Msgbox el valor que me devuelve la
unica propiedad que posee. ¿Como soluciono esto?
2) Habia pensado que la ComClass podria heredar de la clase .NET y asi
finalizaba la version para COM. Pero en VB6 no me aparece ningun miembro
heredado de la clase .NET. Puedo suponer que el programar ComClass posee
limitaciones, y cuando haya algo que no puede interpretar para COM lo ignora.
¿Puede que ocurra eso? ¿o por que no veo los miembros heredados de la clase
.NET?

Todo esto lo hago para intentar no reprogramarlo para COM. Seria casi
perfecto el poder utilizar ComClass y que me funcionase la herencia.

Si alguien me puede orientar un poco en el tema, es la primera vez que
intento hacer un objeto Com a traves de .NET.

Muchas gracias.

Juan Miguel

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua [mvp vb]
27/01/2006 - 15:22 | Informe spam
Hola, Juan Miguel:

1) Creo una ComClass sencilla mediante la plantilla en la que hay una
propiedad de solo lectura que me devuelve un texto. Genero la CommClass y
me
voy al VB6 y añado la referencia al fichero .tlb y me da Error de
automatizacion cuando intento mostrar con Msgbox el valor que me devuelve
la
unica propiedad que posee. ¿Como soluciono esto?



El valor devuelto por la propiedad es String? Un problema podría ser que la
propiedad tuviera un tipo no compatible con COM, pero no me suena el caso.

Conservaste el constructor por defecto que se creó al insertar la ComClass?


2) Habia pensado que la ComClass podria heredar de la clase .NET y asi
finalizaba la version para COM. Pero en VB6 no me aparece ningun miembro
heredado de la clase .NET. Puedo suponer que el programar ComClass posee
limitaciones, y cuando haya algo que no puede interpretar para COM lo
ignora.
¿Puede que ocurra eso? ¿o por que no veo los miembros heredados de la
clase
.NET?

Todo esto lo hago para intentar no reprogramarlo para COM. Seria casi
perfecto el poder utilizar ComClass y que me funcionase la herencia.



Los miembros heredados tienen en la clase derivada exactamente los mismo
atributos que tienen en la clase base. A menos que la clase base fuese
COM-patible, sus miembros no seran accesibles por COM desde la derivada (y
tampoco estoy muy seguro de que lo fueran en caso contrario)

Debes "conectar" manualmente las interfaces COM con la clase .NET:

<ComClass(guid1, guid2, guid3)> _
Class ClasePublica
Dim ClaseServicios As New miClaseNet

Public Sub New()
MyBase.New
End Sub

Public Property Nombre
Get ()
Return ClaseServicios.Nombre
End Get
Set (Value As String)
ClaseServicios.Nombre = Value
End Set
End Property

y asi.

Salud!
Respuesta Responder a este mensaje
#2 Juan Miguel
30/01/2006 - 11:46 | Informe spam
Hola Leonardo,
ya he logrado avanzar y hacer la ComClass. Si se debe a elementos no
compatibles con COM y por esa parte ya he logrado solucionarlo.
Ahora tengo otro problema y es que la clase .NET que utilizo para la
ComClass esta en un ensamblado x. Esa clase a su vez utiliza otra clase que
esta en otro ensamblado llamado y.
Pues bien, cuando utilizo la ComClass me da un error de que no encuentra el
ensamblado y. Lo curioso es que tambien me da posteriormente errores en el
codigo de la clase perteneciente al ensamblado y. Ahi intento cargar un
fichero con una ruta absoluta pero no lo hace, es donde me dice que no
encuentra el ensamblado y.
¿Tal vez debo tener los ensamblados en la gac? He copiado las dll
resultantes de los ensamblados en las carpetas del programa de vb6, de la
ComClass, pero nada.

"Leonardo Azpurua [mvp vb]" escribió:

Hola, Juan Miguel:

> 1) Creo una ComClass sencilla mediante la plantilla en la que hay una
> propiedad de solo lectura que me devuelve un texto. Genero la CommClass y
> me
> voy al VB6 y añado la referencia al fichero .tlb y me da Error de
> automatizacion cuando intento mostrar con Msgbox el valor que me devuelve
> la
> unica propiedad que posee. ¿Como soluciono esto?

El valor devuelto por la propiedad es String? Un problema podría ser que la
propiedad tuviera un tipo no compatible con COM, pero no me suena el caso.

Conservaste el constructor por defecto que se creó al insertar la ComClass?


> 2) Habia pensado que la ComClass podria heredar de la clase .NET y asi
> finalizaba la version para COM. Pero en VB6 no me aparece ningun miembro
> heredado de la clase .NET. Puedo suponer que el programar ComClass posee
> limitaciones, y cuando haya algo que no puede interpretar para COM lo
> ignora.
> ¿Puede que ocurra eso? ¿o por que no veo los miembros heredados de la
> clase
> .NET?
>
> Todo esto lo hago para intentar no reprogramarlo para COM. Seria casi
> perfecto el poder utilizar ComClass y que me funcionase la herencia.

Los miembros heredados tienen en la clase derivada exactamente los mismo
atributos que tienen en la clase base. A menos que la clase base fuese
COM-patible, sus miembros no seran accesibles por COM desde la derivada (y
tampoco estoy muy seguro de que lo fueran en caso contrario)

Debes "conectar" manualmente las interfaces COM con la clase .NET:

<ComClass(guid1, guid2, guid3)> _
Class ClasePublica
Dim ClaseServicios As New miClaseNet

Public Sub New()
MyBase.New
End Sub

Public Property Nombre
Get ()
Return ClaseServicios.Nombre
End Get
Set (Value As String)
ClaseServicios.Nombre = Value
End Set
End Property

y asi.

Salud!



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida