Hola, pregunta sobre Clases en vb6

¿Cómo agrego un "public object module" a un proyecto EXE Standard de vb6?,
Lo que si sé es que un modulo de clase es un "private object module" pero necesito que sea publico, ¿cómo le hago para hacerlo publico o como agrego un modulo objeto publico(public object module)?
Gracias
Gerardo Camacho
[email protected]

2 respuestas

Respuesta
1
En vb6 solo hay dos clases de módulos:
* Los modulos publicos: que solo los modulos normales de vb; no son instanciables y se graban con la extension *.mdl
* Los modulos de clase: son instanciables en el proyecto y, dependiendo del tipo, fuera del mismo. Su extension el *.cls. Si quisieras que dichos modulos pudieran ser instanciados (y usados) por otras aplicaciones, deberias de mirar las propiedades para que se Public o Global.
En definitiva, si quieres utilizar clases de un proyecto fuera del mismo, creo que deberías plantearte el uso de un ActiveX DLL, ya que básicamente es esa su función.
El problema es que no hallo donde pueda establecer la clase a Public, lo que pasa es que me sale un error
"Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types"
y el user defined type esta declarado dentro de la clase la cual es privada, entonces la solucion pienso yo es que tengo que establecerla a Public para que funcione y de esta manera convertirla de "private object module" a "public object module"
Saludos
Precisamente, lo tengo así, el Public Type esta en un modulo normal, y no jala y lo extraño es que la clase en donde me aparece el error, era miembro de un proyecto DLL, y compilaba bien, y la tengo funcionando bien y todo, pero necesitaba esta clase y la incorpore a mi proyecto EXE Standard, y ejecuta el proyecto bien, la bronca viene a la hora de generar el archivo .exe, que es cuando yo creo que hace un chequeo minucioso y encuentra el error, y pues antes, yo tenia Type, más no Public Type, definido en la misma clase, después lo volví publico, y salio el mismo error, después lo pase a un modulo normal, y sale el mismo error, tons la mera vdd no se que onda
Corta el código del "Public Type" y ponlo en un modulo normal (no en un class).
Lo más seguro es que alguno de los parámetros o valores devueltos por la clase privada haga referencia al tipo definido. El compilador de VB debe poder acceder a dicho tipo definido desde cualquier parte del proyecto, ya que las clases no se utilizan hasta que no se instancian (con el New).
No, lo que te comento es: Yo primero, tenia la clase en cuestión, en un proyecto ActiveX DLL, puesto que requería una DLL con esa clase, pero después, el archivo .cls(osease la clase), la anexe a mi proyecto EXE Standard, la DLL ActiveX que hice, jala bien, compilo bien, funciona excelente, pero en el proyecto no. Ahora, el error ocurre cuando intento agregar una variable de tipo User-Defined a una colección. Funciona tal y como debe en la DLL, pero no en el proyecto standard EXE.
Vale, vale, creo que ya me voy haciendo una idea.
Me comentas que el error te da al compilar, la próxima vez prueba a hacer una ejecución completa (Ctrl+F5) para que salgan todos los errores.
También me comentas que el tipo aparecía en una DLL que tenias ¿referenciada? Al proyecto y que trasladaste el tipo a tu proyecto. ¿Lo quitaste de la DLL?.
Si funciono, gracias, al parecer no se pueden agregar User-Defined a una colección. Pero lo intente con una clase, y si funciono, el error ya no aparece. Gracias
No se que quisiste decir con eso de "una tila", no conozco esa expresión, pero gracias.
No entiendo eso de agregar un tipo user-defines a una colección.
Prueba a definir una nueva clase que solo tenga las variables publicas que formaban tu user-defined. Algo así:
Public Type myData
Codigo As Integer
Descripcion As String
End Type
Ponlo en una clase nueva (ElemCol.cls) como:
Public Codigo As Integer
Public Descripcion As String
Cuando quieras insertar datos en la coleccion tendras que haber:
Dim Elem As New ElemCol
Elem.Codigo = ?
Elem.Descripcion = ?
Coleccion. Add Elem
Creo que solucionara tu problema... (aunque ya no se que pensar).
Un saludo y una tila (por lo de la paciencia, digo). ;)
Va, Gracias, ya veo ahora ya entiendo la expresión.
Un Saludo desde Metepec, México.
Es por la paciencia que has tenido para resolver el problema.
Normalmente la gente al ver que no le das la respuesta correcta en el segundo intento te finalizan la pregunta con puntuación baja.
Hablando de puntuaciones... ;)
Un saludo desde Valencia (España).
Respuesta
1
Lo siento amigo pero manaña entro en vacaciones y no podré resolver tu pregunta porque estoy de trabajo hasta arriba porque hoy termino.
Salud

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas