Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: TrashAmbishion en 23 Agosto 2016, 23:05 pm



Título: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: TrashAmbishion en 23 Agosto 2016, 23:05 pm
Hi,

Voy a Goolear a ver que aparece de igual manera no esta tener toda la ayuda posible..

Saludos


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: Eleкtro en 25 Agosto 2016, 17:51 pm
Usar proyecto creado en C# en mi projecto de Vb.Net !!

¿Cual es el problema que encuentra?, solo tienes que referenciar la dll en tu proyecto de VB.NET (de la misma manera que referenciarías un ensamblado de Microsoft .NET Framework) y empezar a usarlo llamando a los métodos y clases y etc que hayas definido en tu librería escrita en C#.

Saludos!


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: TrashAmbishion en 26 Agosto 2016, 15:23 pm
Hola,

Bueno el proyecto no es una DLL es una consola de comandos que se conecta a una aplicación remotamente para pasarle comandos..

https://github.com/Myrcon/Frostbite_Example

Aun no me hago la idea para usarlo..

Salu2

Lo mas facil sería llevarlo a una DLL ?
Como es el proceso para convertirlo ?

O simplemente lo llamo desde mi proyecto, añado una referencia y lo uso de la misma forma pero desde VB.NET

Gracias desde ya



Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: Eleкtro en 26 Agosto 2016, 16:23 pm
O simplemente lo llamo desde mi proyecto, añado una referencia y lo uso de la misma forma pero desde VB.NET

Exacto, puedes añadir una referencia ya sea de una dll, o de un proyecto (.vbproj/.csproj), e incluso de un executable .NET para usar los miembros que hayas compilado (como si fuese una dll)

Saludos


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: TrashAmbishion en 27 Agosto 2016, 20:51 pm
Compa

No logró entender estas llamadas porfa explicamelo para VB.Net

'Program.Connection.PacketReceived = (Program.Connection.PacketReceived + New FrostbiteConnection.PacketHandler(Connection_PacketReceived))
        'Program.Connection.PacketSent = (Program.Connection.PacketSent + New FrostbiteConnection.PacketHandler(Connection_PacketSent))
        'Program.Connection.Connected = (Program.Connection.Connected + New FrostbiteConnection.EmptyParameterHandler(Connection_Connected))
        'Program.Connection.Disconnected = (Program.Connection.Disconnected + New FrostbiteConnection.EmptyParameterHandler(Connection_Disconnected))
        'Program.Connection.Error = (Program.Connection.Error + New FrostbiteConnection.ErrorHandler(Connection_Error))


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: Eleкtro en 27 Agosto 2016, 22:00 pm
No logró entender estas llamadas porfa explicamelo para VB.Net

Program.Connection.PacketReceived = (Program.Connection.PacketReceived + New FrostbiteConnection.PacketHandler(Connection_PacketReceived))
Program.Connection.PacketSent = (Program.Connection.PacketSent + New FrostbiteConnection.PacketHandler(Connection_PacketSent))
Program.Connection.Connected = (Program.Connection.Connected + New FrostbiteConnection.EmptyParameterHandler(Connection_Connected))
Program.Connection.Disconnected = (Program.Connection.Disconnected + New FrostbiteConnection.EmptyParameterHandler(Connection_Disconnected))
Program.Connection.Error = (Program.Connection.Error + New FrostbiteConnection.ErrorHandler(Connection_Error))

Ese código literalmente no es nada, no se de donde has sacado eso, supongo que habrás utilizado algún conversor de código y te lo ha traducido de esa manera xD.

Analizando el código fuente original intuyo que te refieres a esto:
Código
  1. Program.Connection.PacketReceived += new FrostbiteConnection.PacketHandler(Connection_PacketReceived);
  2. Program.Connection.PacketSent += new FrostbiteConnection.PacketHandler(Connection_PacketSent);
  3. Program.Connection.Connected += new FrostbiteConnection.EmptyParameterHandler(Connection_Connected);
  4. Program.Connection.Disconnected += new FrostbiteConnection.EmptyParameterHandler(Connection_Disconnected);
  5. Program.Connection.Error += new FrostbiteConnection.ErrorHandler(Connection_Error);

Son asociaciones de eventos, en VB.NET lo puedes reproducir con los keywords AddHandler y AddressOf
Código
  1. AddHandler Program.Connection.PacketReceived, AddressOf Connection_PacketReceived
  2. AddHandler Program.Connection.PacketSent, AddressOf Connection_PacketSent
  3. AddHandler Program.Connection.Connected, AddressOf Connection_Connected
  4. AddHandler Program.Connection.Disconnected, AddressOf Connection_Disconnected
  5. AddHandler Program.Connection.Error, AddressOf Connection_Error

Saludos!


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: TrashAmbishion en 27 Agosto 2016, 22:12 pm
Pues si sobre ese codigo me referia...

Lo que hice fue que le hice una Referencia al .EXE y ese pedazo no sabia como echarlo andar.. muchísimas gracias voy a probarlo...

PD: A parte de este tema estaba pensando en mostrar un Label con diferentes texto y que se mostrara en diferentes partes del Form y tuviera el efecto de desaparecer  poco a poco y aparecer en otro lado con otro texto.. algo similar al FADE OUT y FADE IN que usastes en un SNNIPETs tuyo.. es posible o tengo que ver por otro lado !!

SAlu2 y gracias nuevamente


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: Eleкtro en 27 Agosto 2016, 23:21 pm
PD: A parte de este tema estaba pensando en mostrar un Label con diferentes texto y que se mostrara en diferentes partes del Form y tuviera el efecto de desaparecer  poco a poco y aparecer en otro lado con otro texto.. algo similar al FADE OUT y FADE IN que usastes en un SNNIPETs tuyo.. es posible o tengo que ver por otro lado !!

Con un timer y algo de maña mediante GDI+ capturando y dibujando el bitmap del control y reduciéndole la opacidad a la imagen lo puedes hacer por ti mismo, o quizás asignando el nivel de transparencia (0-255) de la propiedad Control.BackColor pero eso no resultaría con todos los controles, pero nada de eso es necesario puesto que para ese tipo de efectos de transición puedes utilizar la librería Transitions:
  • https://code.google.com/archive/p/dot-net-transitions/

Escribí un snippet que creo que nunca llegué a publicar en el foro, con ejemplos muy básicos de uso de esa librería:

Código
  1. Imports Transitions
  2.  
  3. ' Flash the BackColor of a control.
  4. Dim transFlashCtrl As Control = Me.Button1
  5. transFlashCtrl.BackColor = Control.DefaultBackColor
  6. Transition.run(target:=transFlashCtrl,
  7.               strPropertyName:="BackColor",
  8.               destinationValue:=Color.LightGreen,
  9.               transitionMethod:=New TransitionType_Flash(iNumberOfFlashes:=2, iFlashTime:=800))
  10.  
  11. ' Animate a control with a linear transition.
  12. Dim transLinear As New Transition(New TransitionType_Linear(1000))
  13. Dim transLinearCtrl As Control = Me.Label1
  14. transLinearCtrl.Text = ""
  15. With transLinear
  16.    .add(target:=transLinearCtrl, strPropertyName:="Text", destinationValue:="Hello World")
  17.    .add(target:=transLinearCtrl, strPropertyName:="ForeColor", destinationValue:=Color.LightYellow)
  18.    .run()
  19. End With
  20.  
  21. ' Interchange the position between two controls.
  22. Dim transInOut As New Transition(New TransitionType_EaseInEaseOut(1000))
  23. Dim transInOutCtrl1 As Control = Me.PictureBox1
  24. Dim transInOutCtrl2 As Control = Me.PictureBox2
  25. With transInOut
  26.    .add(target:=transInOutCtrl1, strPropertyName:="Left", destinationValue:=transInOutCtrl2.Left)
  27.    .add(target:=transInOutCtrl1, strPropertyName:="Top", destinationValue:=transInOutCtrl2.Top)
  28.    .add(target:=transInOutCtrl2, strPropertyName:="Left", destinationValue:=transInOutCtrl1.Left)
  29.    .add(target:=transInOutCtrl2, strPropertyName:="Top", destinationValue:=transInOutCtrl1.Top)
  30.    .run()
  31. End With
  32.  

...aunque para ser sinceros no recuerdo si con esa librería puedes hacer un fade xD, pero puedes hacer efectos muy chulos.

Saludos


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: TrashAmbishion en 31 Agosto 2016, 17:20 pm
Ando convirtiendo pa vb.net y esto perdido con esta parte..

Código
  1.  
  2. public delegate void ErrorHandler(FrostbiteConnection sender, Exception e);
  3.  
  4. public event ErrorHandler Error;
  5.  
  6.  
  7. protected void OnError(Exception e) {
  8.            var handler = this.Error;
  9.  
  10.            if (handler != null) {
  11.                handler(this, e);
  12.            }
  13.        }
  14.  
  15.  

El primer error que me dio es que en Vb.Net la palabra Error es un KeyWord asi que la cambie por ErrorH (la H de handler) y quedo asi:


Código
  1.  
  2. Public Delegate Sub ErrorHandler(ByVal sender As FrostbiteConnection, ByVal e As Exception)
  3.  
  4.  
  5.    Public Event ErrorH As ErrorHandler
  6.  
  7.  
  8.        Protected Sub OnError(ByVal e As Exception)
  9.            Dim handler = ErrorH
  10.            If (Not (handler) Is Nothing) Then
  11.                handler(Me, e)
  12.            End If
  13.        End Sub
  14.  
  15.  

Asi me lo deja el traductor, yo lo único que cambie fue:

Código
  1.  
  2.     Dim handler as ErrorHandler
  3.  
  4.  

Jajaja entonces el ErrorH me dice que es un evento que use el RaiseEvent, para usar esto tengo que primero a ver implementado el AddHandler obligatoriamente ??  esto lo pregunto porque en un proyecto que revise recientemente encontre que hacian uso del RaiseEvent sin el AddHanlder..

Bueno gracias de antemano cualquier ayuda posible..






Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: Eleкtro en 31 Agosto 2016, 21:00 pm
El primer error que me dio es que en Vb.Net la palabra Error es un KeyWord asi que la cambie por ErrorH (la H de handler)

Podrías haber escrito simplemente [Error]:
Código
  1. Public Event [Error] As ...



el ErrorH me dice que es un evento que use el RaiseEvent, para usar esto tengo que primero a ver implementado el AddHandler obligatoriamente ??  esto lo pregunto porque en un proyecto que revise recientemente encontre que hacian uso del RaiseEvent sin el AddHanlder..

Estás confundiendo el significado de las cosas, mira, AddHandler y RaiseEvent no tienen nada que ver, lo primero es para asociar un evento y lo segundo para disparar un evento (desde un invocador de eventos).

El código que has mostrado, el original en C#, hace uso de malas costumbres de programación .NET al implementar un evento mediante el uso de un delegado, y la traducción que has hecho en VB,NET contiene esas malas costumbres y también otras cosas que son incorrectas.

Siguiendo las directrices que aconseja Microsoft, yo lo implementaría así:
Código
  1. Public Class TestClass
  2.  
  3.    Public Event [Error] As EventHandler(Of ErrorArgs)
  4.  
  5.    Public sub New()
  6.    End Sub
  7.  
  8.    Public Sub DoWork()
  9.        ' ...
  10.        Dim args As New ErrorArgs(conn:=valor, ex:=valor)
  11.        Me.OnError(args)
  12.    End Sub
  13.  
  14.    Protected Sub OnError(ByVal e As ErrorArgs)
  15.        If (Me.ErrorEvent IsNot Nothing) Then
  16.            RaiseEvent [Error](Me, e)
  17.        End If
  18.    End Sub
  19.  
  20. End Class

Código
  1. Public NotInheritable Class ErrorArgs : Inherits EventArgs
  2.  
  3.    Public ReadOnly Property Connection As FrostbiteConnection
  4.    Public ReadOnly Property Exception As Exception
  5.  
  6.    Private Sub New()
  7.    End Sub
  8.  
  9.    Public Sub New(ByVal conn As FrostbiteConnection, ByVal ex As Exception)
  10.        Me.Connection = conn
  11.        Me.Exception = ex
  12.    End Sub
  13.  
  14. End Class

Uso:
Código
  1. Public Class TestClass2
  2.  
  3.    Friend WithEvents Obj As TestClass
  4.  
  5.    Public Sub New()
  6.        Me.Obj = New TestClass
  7.    End sub
  8.  
  9.    Private Sub Obj_Error(ByVal sender As Object, ByVal e As ErrorArgs) _
  10.    Handles Obj.Error
  11.        ' ...
  12.    End Sub
  13.  
  14. End Class

PD: ¿No crees que va siendo hora de que leas los artículos de MSDN y practiques todo lo relacionado con eventos (y delegados) en vez de intentar usarlos o implementarlos sin comprender?, no siempre te lo van a dar todo hecho...

Saludos!


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: TrashAmbishion en 31 Agosto 2016, 21:17 pm
Gracias por tu respuesta...

El lenguaje que mas domino es el Vb.Net y no como yo quisiera, el proyecto que necesito usar esta en C# como puedes ver... y se me torna mas complicado

Ahora mismo estaba leyendo sobre las declaraciones de los eventos y delegados en C#, para entenderlo.. y al menos convertirlo para Vb.Net

Actualmente estoy leyendo un curso de Vb.Net, del Guille noc si será el mas indicado, por otro lado estoy en un proyecto que me supera en muchas cosas y ando dando tumbos tratando de entender algunas funciones..

Salu2 y gracias...

Pd: Puedes explicarme porque lo de las malas costumbre en el codigo que te di.


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: Eleкtro en 31 Agosto 2016, 21:50 pm
Ahora mismo estaba leyendo sobre las declaraciones de los eventos y delegados en C#, para entenderlo.. y al menos convertirlo para Vb.Net

Los delegados te va a llevar más tiempo, no lo vas a comprender a la perfección con una lectura, debes practicar.



Actualmente estoy leyendo un curso de Vb.Net, del Guille noc si será el mas indicado, por otro lado estoy en un proyecto que me supera en muchas cosas y ando dando tumbos tratando de entender algunas funciones..

No soy nadie para dar mi opinión sobre los tutoriales de El Guille, pero es un señor muy popular ...por algo será. Recuerdo haber leido un tutorial online que escribió para enseñar VB6, hace muchos años ya, y en algo me ayudó a manejarme por la IDE y cosas muy sencillitas (yo no tenia ni idea de VB), pero no he leido nada suyo de VB.NET.



Puedes explicarme porque lo de las malas costumbre en el codigo que te di.

Simplemente son patrones estándar de diseño, todos los lenguajes imponen sus propios patrones de diseño que el programador debería seguir al pie de la letra, Microsoft sugiere una guía de diseño a la hora de llevar a cabo implementaciones de "X", y es conveniente cumplir con esos patrones de diseño (aunque no sea obligatorio) por que, entre otras cosas, generalmente ofrece ventajas, por ejemplo usar nomenclaturas correctas ayuda al compiler a la VM de .NET a identificar los miembros con mayor rapidez, o también tomar la costumbre de implementar un constructor privado (Private Sub New) imposibilita que el usuario final pueda instanciar una class de manera incorrecta, son muchas las guías de diseño y el por qué de sus ventajas.

Aquí tienes muchas guías de diseño reunidas:
  • Framework Design Guidelines - MSDN (https://msdn.microsoft.com/en-us/library/ms229042%28v=vs.110%29.aspx)

En esas guías podemos encontrar la que nos interesa, el patrón de diseño de un Evento:
  • Event Design - MSDN (https://msdn.microsoft.com/en-us/library/ms229011%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396#)

Y nos dice claramente como lo debemos implementar y una de sus ventajas al seguir este patrón de diseño:
(http://i.imgur.com/sA06Cff.png)

El código de C# (o la traducción que hiciste en VB.NET) no está siguiendo la primera regla de diseño mencionada en la imagen, y a raíz de eso tampoco sigue la otra regla.

Saludos


Título: Re: Usar proyecto creado en C# en mi projecto de Vb.Net !!
Publicado por: TrashAmbishion en 31 Agosto 2016, 21:58 pm
Ok gracias...

A leer entonces y ver que puedo hacer.

Salu2