jueves, 13 de mayo de 2010

VB6 Fixed String en C#

Un nuevo asunto. Resulta que tengo que utilizar una DLL de un SDK de un sistema administrativo. Hay unos VB Types como

Public Type tSerie
aUnidades As Double
aTipoCambio As Double
aSeries As String * kLongSeries
aPedimento As String * kLongDescripcion
aAgencia As String * kLongDescripcion
aFechaPedimento As String * kLongFecha
aNumeroLote As String * kLongDescripcion
aFechaFabricacion As String * kLongFecha
aFechaCaducidad As String * kLongFecha
End Type

Pero en .NET no hay cadenas de longitud fija. Entonces investigando, a lo que llegué es que hay que utilizar MarshalAs, así que en .NET quedaría de esta forma:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 4)]
public struct tSerie
{
public double aUnidades;
public double aTipoCambio;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constantes.kLongSeries)]
public byte[] aSeries;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constantes.kLongDescripcion)]
public byte[] aPedimento;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constantes.kLongDescripcion)]
public byte[] aAgencia;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constantes.kLongFecha)]
public byte[] aFechaPedimento;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constantes.kLongDescripcion)]
public byte[] aNumeroLote;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constantes.kLongFecha)]
public byte[] aFechaFabricacion;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constantes.kLongFecha)]
public byte[] aFechaCaducidad;
}

Así lo implementé y ya no me dio problemas. Ojalá les sea de utilidad.

viernes, 30 de abril de 2010

Uso de OpenPOP.NET

Siguiendo con las pruebas de OpenPOP.NET, les comento que sí pude hacer la conexión. Sin embargo, hay que hacer algunas modificaciones cuando el servidor utiliza SSL (como gmail):

Se abre un socket TCP normal:

clientSocket=new TcpClient();
clientSocket.Connect(strHost,intPort);

Y para habilitar SSL, hay que instanciar un stream SSL que encapsule el socket TCP

SslStream sslStream;
sslStream = new SslStream(clientSocket.GetStream(), true);
sslStream.AuthenticateAsClient(strHost);
streamFuente = (Stream)sslStream;

El método importante aquí es AuthenticateAsClient, para autentificar la petición de nuestro cliente ante el servidor de gmail (en este caso).

Y ya después de eso continuamos con un streamReader y la librería ya lo procesa.

Lo que hay que modificar es en la clase POP3Client.

Saludos

miércoles, 28 de abril de 2010

OpenPOP.NET

Buscando un componente para leer correo desde una aplicación .NET, encontré esta aplicación: OpenPOP.NET . Apenas la voy a probar, a ver que tal.

Ya les contaré mis experiencias.

Saludos!

martes, 27 de abril de 2010

Inicio

Pues he iniciado mi blog. Está pensado para comentar de diversos temas, especialmente sobre programación, tecnología, música y demás.

Saludos!!!