Problema inexplicable [solucionado]

Iniciado por ABDERRAMAH, 28 Agosto 2010, 09:08 AM

0 Miembros y 2 Visitantes están viendo este tema.

ABDERRAMAH

Tengo un problema muy extraño. Normalmente siempre que tengo que guardar pequeñas cadenas de texto he utilizado éste módulo para hacerlo. Lo he usado en windows xp con framework 3 y posteriormente con 3.5. Recientemente he terminado un pequeño programa hecho en windows 7 con visualbasic 2010 que también lo usa y funciona a la perfección, pero como requiere framework 4 he decidido rehacerlo en visualbasic 2008 y windows xp 3.5, hasta ahí perfecto. La parte extraña viene cuando pruebo el programa (que es pequeño y fácil ya que solo maneja texto) escrito igual y con los mismos objetos, solo que sobre framework 3.5 y éste maldito modulo no funciona como debe.

Hay un evento (list value changed) que dispara un getvar() del módulo en cuestión, la primera vez que se ejecuta lo hace bien, las siguientes veces no lee nada. Pruebo putvar() y no funciona tampoco... os aseguro que con anterioridad yo he usado éstas funciones en éste mismo ordenador y no había problema, el código está comprobadisimo.

¿Es posible que con alguna última actualización haya cambiado el comportamiento de éstas? me parece muy raro, ya que sobre framework 4 en win7 funciona... no se... yo pienso que debería hacerle un exorcismo al pc o algo... ¿alguna idea? o ¿puede alguien probar el código en winxp y avisarme si funciona?
Código (vbnet) [Seleccionar]


Module modSystem
   Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal AppName As String, ByVal KeyName As String, ByVal keydefault As String, ByVal ReturnedString As String, ByVal RSSize As Integer, ByVal FileName As String) As Integer
   Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal AppName As String, ByVal KeyName As String, ByVal keydefault As String, ByVal FileName As String) As Integer

   Public Sub WriteINI(ByRef INISection As String, ByRef INIKey As String, ByRef INIValue As String, ByRef INIFile As String)
       Call WritePrivateProfileString(INISection, INIKey, INIValue, INIFile)
   End Sub


   Public Function ReadINI(ByRef Section As String, ByRef KeyName As String, ByRef FileName As String, ByRef Default_Renamed As String) As String
       Dim sRet As String
       sRet = New String(Chr(0), 255)
       ReadINI = Left(sRet, GetPrivateProfileString(Section, KeyName, Default_Renamed, sRet, Len(sRet), FileName))
   End Function



   Public Function GetVar(ByRef file As String, ByRef Header As String, ByRef Var As String) As String
       Dim sSpaces As String ' Max string length
       Dim szReturn As String ' Return default value if not found
       szReturn = vbNullString
       sSpaces = Space(5000)
       file = My.Application.Info.DirectoryPath & "\" & file
       Call GetPrivateProfileString(Header, Var, szReturn, sSpaces, Len(sSpaces), file)
       GetVar = RTrim(sSpaces)
       GetVar = Microsoft.VisualBasic.Strings.Left(GetVar, Len(GetVar) - 1)
   End Function

   Public Sub PutVar(ByRef file As String, ByRef Header As String, ByRef Var As String, ByRef Value As String)
       On Error GoTo PutVar_Error
       Dim fpath As String
       fpath = My.Application.Info.DirectoryPath & "\" & file
       Call WritePrivateProfileString(Header, Var, Value, fpath)
       On Error GoTo 0
       Exit Sub
PutVar_Error:
       MsgBox("Error " & Err.Number & " (" & Err.Description & ") en procedimiento putvar.")
   End Sub
End Module


seba123neo

las funciones GetVar y PutVar las probe y funcionan, el problema debe estar en el codigo que ejecutas cuando llamas a esas funciones, trata de usar Try Catch en .NET..en vez de On Error..sino parece visual basic 6.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

ABDERRAMAH

#2
Si, pero no. Será que necesito un formateo... Ya te digo que tengo el programa acabado en visualstudio 2010 y funciona perfecto, he repasado mil veces y no hay lugar a fallo, será mi sistema operativo. Gracias por la ayuda

Si que pondre try catch, es más elegante... no lo he cambiado porque siempre ha funcionado.

[D4N93R]

Las versiones del framework no tienen nada que ver , y menos Visual Studio, ya que estas funcionan con la versión a la cual tu proyecto está apuntando, es decir, si hiciste una aplicación para la 2.0, siempre va a correr en la 2.0, que no quiere decir que sea algo viejo, porque la 2.0 está siempre como núcleo de las demás.

Ahora no puedo revisar tu código, me disculpas, pero estoy algo full de trabajo.

Acuérdate siempre de depurar linea por línea!

Un saludo!

ABDERRAMAH

Na, tranqui, lo de los framework que digo es que yo he terminado un programa sobre 4.0 y ahora quiero REESCRIBIRLO en 3.5 identico. El código está bien, no tiene nada que ver con los framework funciona en 4.0 igual que en 3 o 2. Lo que pasa que el programa compilado en 4.0 no funciona en la mayor parte de windows xp, eso es todo. De todas formas ya me han asegurado que el código funciona en xp, así que mi sistema tiene algo mal (como ya sospechaba por varias razones). Gracias por contestar de todas formas.

[D4N93R]