![]() |
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 |
Deberia ser mas o menos
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
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:
- Llamar las cosas por su nombre
- 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
|
La franja horaria es GMT +2. Ahora son las 07:32:52. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi