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: 20 años, 1 mes
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: 19 años, 1 mes
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: 20 años, 1 mes
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: 19 años, 1 mes
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: 20 años, 1 mes
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(), ObjDatosRH, ObjResultados)
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: 19 años, 1 mes
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: 729
Antigüedad: 19 años, 4 meses
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: 19 años, 1 mes
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: 20 años, 1 mes
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 11:09.