Título: StructToVariant - VariantToStruct Publicado por: F3B14N en 3 Noviembre 2010, 22:05 pm Hola gente, quería pedirle a los coders si se animan a reparar estas simples funciones. Ya que funcionan en local, pero al intentar cargar un variant guardado a una estructura en otro proyecto, da error.
Código: Private Type ControlVB Gracias. Título: Re: StructToVariant - VariantToStruct Publicado por: BlackZeroX en 4 Noviembre 2010, 09:49 am .
Yo personalemente solo cambiaria los punteros hacia las variables... igual no creo que nadie te ayude en la forma que lo pides el susodicho problema... Dulces Lunas!¡. Título: Re: StructToVariant - VariantToStruct Publicado por: F3B14N en 5 Noviembre 2010, 03:50 am . Yo personalemente solo cambiaria los punteros hacia las variables... igual no creo que nadie te ayude en la forma que lo pides el susodicho problema... Dulces Lunas!¡. A que te referís 'en la forma que lo pides el susodicho problema', somos de distintos regiones :P, no en todos los lugares se habla/escribe de la forma que tu tenes incorporada. No se a que te referís, pero me da la sensación, de que crees que lo pido de mala manera o faltando el respeto :S. Si es así, para nada es esa mi intención, discúlpenme si se mal entiende. --- BlackZeroX entiendo lo que decís pero, para lo que estoy haciendo, es necesario guardar la estructura, esa estructura esta de ejemplo para que entiendan lo que intento hacer... Y ademas me da curiosidad, debería funcionar, ya que si lo hago con las funciones Get y Put trabajando con binarios, funciona. El problema esta al sacar los datos de memoria :/ Gracias! Título: Re: StructToVariant - VariantToStruct Publicado por: BlackZeroX en 5 Noviembre 2010, 07:55 am .
Susodicho problema es el problema actual expuesto... soy de México y en españa me aprece que usan lo mismo... mira que no miento: http://www.wordreference.com/definicion/susodicho http://www.google.com.mx/search?q=Susodicho+&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:es-MX:official&client=firefox-a. Ahora ya vi mejor el codigo solo te dire que las variables de tipo string u otras tienden a tener constructores o similares esto por el SafeArray de VB6, aun no lo confirmo pero lo que si te puedo decir es que como estas COPIANDO solo los punteros al termino del proceso la variable N es destruida y como la variable Z tiene el mismo puntero intentara destruir algo que ya esta destruido, esto es con esactitud uno de los problemas que yo tube hace tiempo... lo resolvi cambiando punteros entre variables ( SwapPtr() ); aun que viendolo mejor no es el mismo problema ya que la funcion StructureToVariant solo retorna un tipo de variable Array de byte, aun que se intento hacer algo similar... Ahora TODO el codigo esta mal... la forma mas facil de pasar una variable "Struture" a un tipo "Variant" es esta Código
y viseversa (Solo del mismo tipo OJO con eso) y para cambiar un puntero de variable por otra puedes usar esta funcion que me hice para evitar un tipo crash con destruccion de variables al finalizar el proceso... Código
Dulces Lunas!¡. Título: Re: StructToVariant - VariantToStruct Publicado por: F3B14N en 13 Noviembre 2010, 00:46 am Gracias por interesarte y ayudarme BlackZeroX ;-)
Pero no era eso, sino que, el problemín es la funcion Len() de VB6 que devuelve el tamaño de la estructura erroneamente :-\. Con este ejemplo lo pueden confirmar: Código: Private Type st Si cambian el "a.." por algo mas/menos largo, el retorno de Len() vá a ser el mismo siempre... y ese es el problema para pasar la estructura a un array byte. Si alguien supiera como solucionar esto, estaria COMPLETAMENTE agradecio si me ayudaran a resolver el problemita. Gracias! Título: Re: StructToVariant - VariantToStruct Publicado por: LeandroA en 13 Noviembre 2010, 02:29 am Las estructuras deben tener un tamaño fijo, esto queire decir que si utilizas string vas a tener que darle una dimencion
Private Type st ss As String * 50 ll As Long End Type de todas formas "creo" que aveces esto puede no funcionar, no recuerdo si era porque mesclaba integer, pero no me funciono. creo que lo mas adecuado seria utilizar array de bits, Private Type st tamañocadena as long cadena() as byte otracosa As Long End Type entonces en tamañocadena pones la dimencion del array de cadena(). bue nose igual proba con lo otro primero. saludos. Título: Re: StructToVariant - VariantToStruct Publicado por: F3B14N en 13 Noviembre 2010, 02:37 am Las estructuras deben tener un tamaño fijo, esto queire decir que si utilizas string vas a tener que darle una dimencion Private Type st ss As String * 50 ll As Long End Type de todas formas "creo" que aveces esto puede no funcionar, no recuerdo si era porque mesclaba integer, pero no me funciono. creo que lo mas adecuado seria utilizar array de bits, Private Type st tamañocadena as long cadena() as byte otracosa As Long End Type entonces en tamañocadena pones la dimencion del array de cadena(). bue nose igual proba con lo otro primero. saludos. Si, es cierto al darle las dimensiones funciona sin problemas, pero en ambos casos Strings o ByteArrays, sucede lo mismo al dejarlos dinamicos :/ Se me ocurre hacer una funcion que busque a partir del puntero que se le pasa, "el prototipo de cierre de un structure" osea "las instrucciones", voy a investigar un poco aver si logro algo :P Ojala alguno de los expertos que rondan por aca me ayuden :A Gracias Título: Re: StructToVariant - VariantToStruct Publicado por: BlackZeroX en 13 Noviembre 2010, 03:34 am EDITO IMPORTANTE: OJO en una structura donde aya Strings, Arragles o similares que no tengan longitud de bites definidos previamente se sustituyen con el puntero hacia otra parte de la memoria es decir que se sustituyen por 4 bytes en cada uno donde aparezca (Punteros <<Long>>), Código
Son 8 bytes por que? sencillo mira 4 bytes de puntero a la estructura de 8 bytes que contiene a si ves los punteros a los elementos de la estructura es decir: Código
ese puntero ( el almacenado en -> lng_ptr) apunta a el puntero del inicio de tu estructura donde hay 4 bytes del String (Puntero) 4 bytes del tipo long (No es un putero ya es la variable) = 12 bytes + los bytes a donde apuntan los 4 del string Es decir Len() esta haciendo correctamente su trabajo... solo que actua de esta manera como lenb() . gracias a esto la estructura tiene un tamaño fijo y cada elemento es un apuntador (para los string u otros que no sean numeros), por lo tanto si quieres leer algo de X elemento y cambiar a otra estructura o variable etc puedes obtener esos 4 bytes del string e intercambiarlos con los de otra variable string o dentro de otra estructura de distinto tipo Ejemplo: Código
en un modulo cualquiera... Código
Dulces Lunas!¡. Título: Re: StructToVariant - VariantToStruct Publicado por: BlackZeroX en 13 Noviembre 2010, 03:54 am .
Mas claro aqui lo dejo explicado: Código
Dulces Lunas!¡. Título: Re: StructToVariant - VariantToStruct Publicado por: F3B14N en 13 Noviembre 2010, 04:20 am Perfecto ahora si entendí como funciona, muchas gracias! :D
|