Foros del Web » Programación para mayores de 30 ;) » .NET »

En VB.Net Sí pero en C# No. ¡¿Por qué?!

Estas en el tema de En VB.Net Sí pero en C# No. ¡¿Por qué?! en el foro de .NET en Foros del Web. Hola a todos, Hace unos días estaba haciendo un webservices en C# el cual lleva agregada una libreria (dll) con conexion a SAP. Dentro de ...
  #1 (permalink)  
Antiguo 23/02/2009, 13:58
Avatar de Zay
Zay
 
Fecha de Ingreso: agosto-2006
Ubicación: Veracruz
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
En VB.Net Sí pero en C# No. ¡¿Por qué?!

Hola a todos,

Hace unos días estaba haciendo un webservices en C# el cual lleva agregada una libreria (dll) con conexion a SAP. Dentro de esta libreria se encuentra un método (llamemosle Instancia) de tipo void que se le pasan 3 parametros, 2 de tipo string y uno de tipo OBJECT pero por REFerencia. Y lo que hace este metodo es regresarme el OBJECT que le pase instanciado hacia esa libreria de sap que contiene otros metodos.... explicado con código es así:
Código PHP:
Object Object1 = new Object();
Object1 null;
LibreriaSap ObjSap = new LibreriaSap();
ObjSap.Instancia("String1","String2"Ref Object1); 
Sin problema con lo anterior, pero una vez que hice lo anterior, si quiero hacer algo como esto:

Código PHP:
Object1.MetodoLibreriaSap(); 
No me lo permite el compilador por que no encuentra ese metodo para Object1 y no es valido.

Al final tuve que hacer este código en VB.Net y lo termine sin problemas, pero me quedo en duda como resolver esta situacion en C#.

Alguien tiene una idea???

Gracias de antemano.
__________________
"Nadie es Indispensable en esta vida, pero hay que dejar algo de nuestro ser, en este mundo." YLJ
  #2 (permalink)  
Antiguo 23/02/2009, 14:30
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: En VB.Net Sí pero en C# No. ¡¿Por qué?!

el problema es por el boxing y el unboxing mientras que en vb te guarda la ref del tipo en design time en c# no y lo que tienes que hacer es anteponer el tipo al que vas a convertir

es decir

((LibreriaSap)Object1).MetodoLibreriaSap();
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 23/02/2009, 15:42
Avatar de Zay
Zay
 
Fecha de Ingreso: agosto-2006
Ubicación: Veracruz
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: En VB.Net Sí pero en C# No. ¡¿Por qué?!

Gracias Peterpay,

compile nuevamente mi código y me sigue marcando el error. La sugerencia que me diste quedo de la siguiente manera:

Código PHP:
((DESclsDatoRHfLib.ClsDatosRHClass)objDatosRH).MOVEFIRST(); 
Y cuando compilo me dice el siguiente error:

Código PHP:
'DESclsDatoRHfLib.ClsDatosRHClass' does not contain a definition for 'MOVEFIRST' 
Alguna otra sugerencia??

Gracias
__________________
"Nadie es Indispensable en esta vida, pero hay que dejar algo de nuestro ser, en este mundo." YLJ
  #4 (permalink)  
Antiguo 23/02/2009, 15:45
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: En VB.Net Sí pero en C# No. ¡¿Por qué?!

100% seguro q la clase tienen ese metodo y que ese metodo no es privado
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 23/02/2009, 15:52
Avatar de Zay
Zay
 
Fecha de Ingreso: agosto-2006
Ubicación: Veracruz
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: En VB.Net Sí pero en C# No. ¡¿Por qué?!

Peterpay,

Por eso comento que en VB.net, lo hice y me funciono sin problemas...
Aquí te pongo codigo en VB.net que ya esta funcionando:

Código PHP:
Dim dsDatos As New DataSet
Dim Table 
As New DataTable("DatosRH")
Dim Row As DataRow
Dim ObjSap 
As New DESclsDatoRHfLib.ClsDatosRHClass
Dim ObjDatosRH 
As Object
Dim ObjResultados 
As Object
 
ObjDatosRH 
Nothing
ObjResultados 
Nothing
 
ObjSap
.Destination "String"
ObjSap.DimAs("String1""String2"ObjDatosRH)
ObjSap.Zrh_Lineasinternas(NEmpleado.ToString(), ObjDatosRHObjResultados)
ObjDatosRH.MOVEFIRST() 

Agradezco nuevamente la atención.
__________________
"Nadie es Indispensable en esta vida, pero hay que dejar algo de nuestro ser, en este mundo." YLJ
  #6 (permalink)  
Antiguo 23/02/2009, 16:27
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: En VB.Net Sí pero en C# No. ¡¿Por qué?!

el detalle es q en c# el casteo debe ser explicito y si el tipo no es exactamente el q defines dentro de los parentesis nunca vas a encontrar el match habria q revisr que tipo retorna como referencia porq MOVEFIRST parece mas comando de ado y no propio de un recordset o un dataset o un bindingsource que del tipo

DESclsDatoRHfLib.ClsDatosRHClass
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #7 (permalink)  
Antiguo 23/02/2009, 16:45
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 17 años
Puntos: 8
Respuesta: En VB.Net Sí pero en C# No. ¡¿Por qué?!

Código:
{
    DataSet dsDatos = new DataSet();
    DataTable Table = new DataTable("DatosRH");
    DataRow Row = default(DataRow);
    DESclsDatoRHfLib.ClsDatosRHClass ObjSap = new DESclsDatoRHfLib.ClsDatosRHClass();
    object ObjDatosRH = null;
    object ObjResultados = null;
    
    ObjDatosRH = null;
    ObjResultados = null;
    
    ObjSap.Destination = "String";
    ObjSap.DimAs("String1", "String2", ObjDatosRH);
    ObjSap.Zrh_Lineasinternas(NEmpleado.ToString(), ObjDatosRH, ObjResultados);
    ObjDatosRH.MOVEFIRST();
}
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #8 (permalink)  
Antiguo 23/02/2009, 16:49
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: En VB.Net Sí pero en C# No. ¡¿Por qué?!

REHome su codigo (el ulitmo almenos esta en vb.net asi q no a las ;) pero el detalle no es ese si no un unboxing que debe hacer de una manera adecuada.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #9 (permalink)  
Antiguo 23/02/2009, 17:54
Avatar de Zay
Zay
 
Fecha de Ingreso: agosto-2006
Ubicación: Veracruz
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: En VB.Net Sí pero en C# No. ¡¿Por qué?!

En VB.net el tipo de dato al que se convierte el Objeto "ObjDatosRH" es System.__ComObject y leyendo en la web, me sugiere el uso de type y gettype, pero no ubico aún del todo como...
__________________
"Nadie es Indispensable en esta vida, pero hay que dejar algo de nuestro ser, en este mundo." YLJ
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:12.