Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-03-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Exclamation problema con GUIDS

amigos necesito su ayuda.
estamos desarrollando un software que utiliza GUID's, ejecuta un proceso, devuelve un array. y debemos convertir el array de byte a widestring o string.



Código Delphi [-]
ValueReturn = interface(IDispatch)
    ['{GH2BA201-BG4E-40GF-8C37-12BCF2GBE122}']
    procedure Start(category: Byte; out outValue: WideString); safecall;
  end;

// otro proceso

ValueReturnB = dispinterface
    ['{GH2BA201-BG4E-40GF-8C37-12BCF2GBE122}']
    procedure Start(category: Byte; out ReturnB: WideString); dispid 2033;
  end;

como dije debo ejecutar el proceso, capturar el array de byte, y convertirlo a widestring.


gracias por su ayuda

Última edición por elmago00 fecha: 12-03-2014 a las 18:44:42.
Responder Con Cita
  #2  
Antiguo 13-03-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
¿Y cuál es la pregunta?
Responder Con Cita
  #3  
Antiguo 13-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por duilioisola Ver Mensaje
¿Y cuál es la pregunta?





.
Responder Con Cita
  #4  
Antiguo 13-03-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
¿Y cuál es la pregunta?
el problema es que no puedo realizar el proceso completo, hago la llamada al dicha GUIs, pero al pasarle una variable tipo byte, y una widestring para obtener la salida, me da error. y por lo mismo no puedo convertir la variable byte, ni obtener la salida del proceso numero 2. "dispid"

en pocas palabras como ejecutar el proceso y convertir el array de byte a widestring.
Responder Con Cita
  #5  
Antiguo 14-03-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
O sea que la duda no tiene nada que ver con GUIDs.

Parece que obtienes un error al llamar a unos procedimientos.
  • No nos dices el mensaje de error que te devuelve.
  • No nos dices cómo llamas al procedimiento.
  • No nos muestras parte del código que utilizas para hacer la llamada.
  • No nos dices si tienes el código que ejecutan esos procedimientos o si son cosas precompiladas.

Bueno, creo que entiendes la idea. No puedes llegar aquí y decir tengo un problema y esperar que la gente saque su bola de cristal y haga averiguaciones místicas y te den la respuesta... Para eso deberías ir a ver a una bruja.

No te ofendas, pero:
  • Tómate un tiempo para generar la pregunta. Ese tiempo es el mismo que se tomará la gente en responderte.
  • Relee la pregunta poniéndote en el lugar de la persona que al otro lado del mundo la leerá, sin conocerte a ti ni a la aplicación ni los datos.
  • Responde las posibles preguntas que te podrían llegar a hacer.
Responder Con Cita
  #6  
Antiguo 14-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es lo de siempre, si se hace caso omiso a nuestra mágica guía de estilo.
Responder Con Cita
  #7  
Antiguo 14-04-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
O sea que la duda no tiene nada que ver con GUIDs.

Parece que obtienes un error al llamar a unos procedimientos.
  • No nos dices el mensaje de error que te devuelve.
  • No nos dices cómo llamas al procedimiento.
  • No nos muestras parte del código que utilizas para hacer la llamada.
  • No nos dices si tienes el código que ejecutan esos procedimientos o si son cosas precompiladas.

Bueno, creo que entiendes la idea. No puedes llegar aquí y decir tengo un problema y esperar que la gente saque su bola de cristal y haga averiguaciones místicas y te den la respuesta... Para eso deberías ir a ver a una bruja.

No te ofendas, pero:
  • Tómate un tiempo para generar la pregunta. Ese tiempo es el mismo que se tomará la gente en responderte.
  • Relee la pregunta poniéndote en el lugar de la persona que al otro lado del mundo la leerá, sin conocerte a ti ni a la aplicación ni los datos.
  • Responde las posibles preguntas que te podrían llegar a hacer.
hola, duilioisola
antes que nada, pido disculpas por no exponer bien la pregunta. ya bastante paciencia me han tenido los moderadores.

veras, esta es una dll. creada en .net. utiliza estas GUIDs:
Código Delphi [-]
TGUID = '{288230CE-8W49-4C7C-D166-T032363EADFC}';

en la dll esta este proceso

Código Delphi [-]
analytics= interface(IDispatch)
    ['{288230CE-8W49-4C7C-D166-T032363EADFCE}']
    procedure Execute(out Nmae: Byte; out UNIC: Byte;             
                      out restart: PSafeArray; out DOM78: PSafeArray;
                   ); safecall;
  end;

la llamada la hago asi.


Código Delphi [-]
procedure TForm12.Button7Click(Sender: TObject);
var

nombre:byte; unico:byte; restaurar:PSafeArrayay; Dom:PSafeArray;
begin
analytics.Execute(nombre,  unico, restaurar, Dom,);

end;

el error es este:
[dcc32 Error] Unit12.pas(493): E2018 Record, object or class type required

el código completo del programa no lo tengo, la empresa no permite eso.
Responder Con Cita
  #8  
Antiguo 14-04-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
El problema creo que viene porque la dll define una interfase.
No se como se trabaja con interfases.
Leí alguna vez algo, pero no le encontré utilidad en su momento y no recuerdo nada de eso.

También habría que ver como defines analytics en el formulario TForm12.
Revisa este artículo http://www.marcocantu.com/epascal/Spanish/ch09win.htm
Ejemplo
Código Delphi [-]
// declaration externa (en lugar de código)
function LineTo; external 'gdi32.dll' name 'LineTo';

Y si sigue sin funcionar:
Supongo que la mejor opción es que abras un nuevo hilo con esta última pregunta y le pongas un asunto acorde.

El título podría ser: "Ejecutar procedimiento dentro de una dll"
Creo que solo te falta clarificar qué es Unit12.pas. Por lo que escribes no se sabe si es la unidad donde está la interfase o la unidad del formulario desde donde la quieres llamar.
Como nota aparte, el GUID que muestras primero y el de la definición de la interfase no son iguales. Parece que o falta o sobra el último digito
Responder Con Cita
  #9  
Antiguo 14-04-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
El problema creo que viene porque la dll define una interfase.
No se como se trabaja con interfases.
Leí alguna vez algo, pero no le encontré utilidad en su momento y no recuerdo nada de eso.

También habría que ver como defines analytics en el formulario TForm12.
Revisa este artículo http://www.marcocantu.com/epascal/Spanish/ch09win.htm
Ejemplo
Código Delphi [-]
// declaration externa (en lugar de código)
function LineTo; external 'gdi32.dll' name 'LineTo';

Y si sigue sin funcionar:
Supongo que la mejor opción es que abras un nuevo hilo con esta última pregunta y le pongas un asunto acorde.

El título podría ser: "Ejecutar procedimiento dentro de una dll"
Creo que solo te falta clarificar qué es Unit12.pas. Por lo que escribes no se sabe si es la unidad donde está la interfase o la unidad del formulario desde donde la quieres llamar.
Como nota aparte, el GUID que muestras primero y el de la definición de la interfase no son iguales. Parece que o falta o sobra el último digito

gracias por responder la unit12 es donde esta el formulario que hace la llamada.
me falto poner como la defino, que el proceso completo es asi:
Código Delphi [-]
procedure TForm12.Button7Click(Sender: TObject);
var
analytics:Analytics;
nombre:byte; unico:byte; restaurar:PSafeArrayay; Dom:PSafeArray;
begin
analytics.Execute(nombre,  unico, restaurar, Dom,);

end;

las GUID no son iguales, por que se borro la utlima letra al editar el post:
esta esta completa:
Código Delphi [-]
II_Analytics: TGUID = '{288230CE-8W49-4C7C-D166-T032363EADFCE}';

esto es lo hay en la dll
Código Delphi [-]
Analytics= interface(IDispatch)
    ['{288230CE-8W49-4C7C-D166-T032363EADFCE}']
    procedure Execute(out Nmae: Byte; out UNIC: Byte;             
                      out restart: PSafeArray; out DOM78: PSafeArray;
                   ); safecall;
  end;
con el asunto de la interface, no tengo problemas, por que puedo llamar a otras GUIDs, y funciona perfecto, y lo hago de la misma manera, solo es con esta el problema.

gracias por haber intentado ayudarme.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:21:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi