![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Si estas programando para Win32 y trabajas con Threads, esa variable tiene que ser declarada como:
Si estas programando para 16 bits, debes saber que esa variable se comparte para todos los Threads. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#2
|
|||
|
|||
|
Ok,muchas gracias por vuestro tiempo. En principio me ha servido de ayuda. Pero una cosa sigo sin tener clara,a ver os cuento..
Lo que aparece en mi unidad 1(UNIT 1) es: INTERFACE . . VAR V:boolean; . . IMPLEMENTATION . . END. Por lo tanto, exporto la variable boolena V. Ahora al hacer la biblioteca(Lib.dll); USES Unit1; PROCEDURE SetVale(V:boolean); BEGIN V:=False; END; FUNCTION GetVale:boolean; BEGIN GetVale:=V; END; EXPORTS SetVale,GetVale; BEGIN V:=True; END; Bueno esto es lo que contiene mi libreria. Al hacer la unidad de importacion tengo, INTERFACE PROCEDURE SetVale(V); FUNCTION GetVale:boolean; IMPLEMENTATION PROCEDURE SetVale(V);EXTERNAL 'Lib.dll'; FUNCTION GetVale:boolean; EXTERNAL 'Lib.dll'; Bueno hasta aqui todo bien,pero el problema viene cuando quiero acceder a estos subprogramas desde la aplicacion.Lo logico seria llamar a los subprogramas con: SetVale(V); V:=GetVale; pero claro logicamente me dice que v no esta declarada,¿como lo modifico?Muchas gracias por vustro tiempo de verdad. |
|
#3
|
||||
|
||||
Por tu bien, declaralo así: Comentar que no le dabas el valor a V, sino que lo ponias a false. En la librería, V no debería estar en la zona de interface, simplemente porque el usuario de la librería jamás va a acceder a la variable directamente, sino a través de Get y SetValue. No he hecho la prueba, quizás ni siquiera se exporte esa variable, pero intuitivamente, al verla en la zona de interface, puede parecer que si se exporta. Es decir, deberás declararla en la zona de implementation. Por otra parte, el error que tienes al usar la libreria es de nombres, en tu programa, no uses V para nada, Si necesitas una variable Boolean, declarala con otro nombre. En realidad, cuando usas la libreria, tienes que olvidarte de como está hecha, y solo prestar atención a GetValue y SetValue. Esa abstracción es indispensable para diseñar la dll correctamente, y también para poderla usar (OOP). Como usuario de una libreria no tienes por qué saber como se llama esa variable, ni te hace falta.
Según actives o desactives el check1, se marcará el check2. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#4
|
||||
|
||||
|
Si me permites un detalle más, cuando hagas una dll, haz también un archivo .pas asociado a él. La libreria queda como ya la has hecho, el archivo .pas sería el siguiente:
Imagina que tu librería vas a usarla en 2 programas distintos. Cuando vayas a usarla en el segundo programa, ya no recuerdas el nombre de las funciones ni los parámetros que lleva, entonces, tienes que abrir el primer programa, ver las declaraciones y copiar / pegar en el segundo programa. Al hacer este .pas, en el segundo programa, solo añades la unidad LibExport y accedes a su contenido; ya puedes ver las declaraciones. De hecho es como lo hace la VCL. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#5
|
|||
|
|||
|
Ya lo he conseguido arreglar.Muchas gracias a los que se han molestado en ayudarme.Me habeis servido de mucha ayuda.Gracias!
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|