Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-09-2004
slacas75 slacas75 is offline
Registrado
 
Registrado: feb 2004
Posts: 3
Poder: 0
slacas75 Va por buen camino
Ayuda con DLL's...(CreateOleObject)...urgente.

Hola a todos..

resulta que tengo un par de DLL's que utilizo con un proyecto, las cuales uso en distintos procedimientos....mas o menos asi :

procedure Proc1;
var
BRN054 : Variant
Entrada : Variant;
Salida : Variant;
Control : String;
begin
BRN100 := CreateOleObject('EOL.BRN100P'); // Produccion
Entrada:= VarArrayCreate([0,7], VarOleStr);
Salida:= VarArrayCreate([0,7], VarOleStr);
Control:= 'MAN110D';
BRN100.Logon;
BRN100.Brn100(Control,Entrada,Salida);
BRN100.Logoff;
end;

procedure Proc2;
var
BRN054 : Variant;
VecInput : Variant;
VecOutPut : Variant;
begin
BRN054 := CreateOleobject('EOL.BRN054P'); // Produccion
VecInput := VarArrayCreate([0,1], VarOleStr);
VecOutput := VarArrayCreate([0,19],VarOleStr);
BRN054.LogOn;
BRN054.BRN054(VecInput,VecOutput); //ojo que aqui son dos parametros
BRN054.LogOff;
end;

El problema es que cuando llamo al segundo procedimiento me truena en la linea BRN054.BRN054(par1,par2) mostrandome el mensaje de error:
Error: 0001 0009 Parameter error. Location of wrong parameter is 2

Lo estraño es que si ejecuto el proyecto llamando solo a uno de los dos procedimientos funciona perfectamente.

Tal parece que el proyecto se queda con el objeto OLE vinculado de alguna forma y el segundo en ejecutarse por eso marca el error.

De antemano agradezco su ayuda u comentarios.

gracias

saludos
Responder Con Cita
  #2  
Antiguo 19-09-2004
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Deberia ser mas o menos

Código Delphi [-]
   procedure Proc1;
   var
     BRN054 : Variant
     Entrada : Variant;
     Salida   : Variant;
     Control : String;
   begin
     BRN100 := CreateOleObject('EOL.BRN100P'); // Produccion
     try
        Entrada:= VarArrayCreate([0,7], VarOleStr);
        Salida:= VarArrayCreate([0,7], VarOleStr);
        Control:= 'MAN110D';
        BRN100.Logon;
        BRN100.Brn100(Control,Entrada,Salida);
        BRN100.Logoff;
      finally
        BRN100:=nothing//no recuerdo si es null, nothing o nil...   
      end;
   end;

Es importante liberar los objetos COM una vez dejen de usarse. Es muy raro lo que mencionas, son 2 componentes diferentes....no deberia haber conflictos a menos que compartas un recurso como un archivo de texto, varibles globales o algo asi. En esos casos debes poner una seccion critica, o mejor, reorganizar el codigo por algo mejor.

No olvides que puedes usar el depurador de delphi para el componente COM tambien! No debugees a ciegas que es horrible. Si esta hecho en otro lenguaje como VB, haz un proyecto de prueba en VB y depura desde alli.

Como critica constructiva, las variables tienen nombres muy raros, deberias evitar al maximo acronimos o siglas que no sean del dominio publico y reemplazar por nombres obvios. Por ejemplo

Código Delphi [-]
   procedure Proc1;
    var
   ServidorProduccion: Variant
   Entrada : Variant;
   Salida   : Variant;
   Control : String;
    begin
   ServidorProduccion:= CreateOleObject('EOL.BRN100P'); 
   .
   .
  end;

Un pequeño tip: SIEMPRE que exista un comentario que intenta explicar que rayos hace o significa algo, quiere decir que el codigo esta en formato criptico. EN VEZ de poner comentario, se debe:

- Si es un numero o caracter "magico" reemplazar por constante:
Código Delphi [-]
  a:=4 * 3 //3 es el factor de conversion de impuesto X
  
  Por
  
  a:=4 * FactorConversionImpuestoX

- Llamar las cosas por su nombre
Código Delphi [-]
   pkrc.Show; //Mostrar forma de clientes
   
   Por
   
  FormaClientes.Show;

- Si el codigo esta largo o complejo y no se entiende a) Reescribirlo hasta que se entienda o b) Trasladar la parte compleja a un metodo y llamarlo dentro del proceso normal, para que no estorbe la lectura del resto o c) Escribir en lenguaje natural lo que el codigo complejo hace, por ejemplo si es assembler

Código Delphi [-]
  
  EncriptarDatos(Datos);
__________________
El malabarista.

Última edición por mamcx fecha: 19-09-2004 a las 03:37:02.
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 20:15:46.


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