Por ejemplo, si I declarar una función en la aplicación principal, y un pase de un puntero a la misma, a partir de una biblioteca cargada dinámicamente (a través de dlopen
bajo Linux o LoadLibrary
bajo Windows) utilizando un argumento símbolo recibido (a través de dlsym
o GetProcAddress
respectivamente) y tratar de llamar a esa función, ¿funcionaría correctamente?¿El puntero C/C++ guarda la dirección de memoria absoluta, o relativa a la aplicación, o relativa al módulo?
¿Lo mismo si pasa el puntero desde una biblioteca cargada dinámicamente a otra? Creo que debería funcionar si el puntero al menos en relación con la aplicación, pero no en relación con el módulo/biblioteca.
Otro ejemplo. Declaro una función en una aplicación y le paso el puntero a otra aplicación completamente independiente (tanto C como C++) de alguna manera (cadena de parámetros o archivo i/o - identifique cómo, solo una idea) y trato de llamar a esta función, ¿podría? trabajar tambien? Podría esperar que funcione si los indicadores son absolutos. Tal vez simplemente no funcionará porque al sistema no le gustará esa llamada cruzada debido a la seguridad.
¿Importa de alguna manera a su programa? –
Bueno, el intercambio entre procesos no tiene importancia para mi programa, solo generaliza la pregunta. Compartir en bibliotecas dinámicas y cargadas estáticamente en mi programa es lo que necesito, porque el plugin puede llamar a las funciones de la aplicación principal indirectamente, a través de la dirección. – Nick
Quizás podría ser otra pregunta ... Tengo una aplicación principal, una biblioteca principal (vinculada) y un complemento para cargar dinámicamente. La aplicación principal registra una matriz de objetos, que contiene direcciones de funciones en algunos campos (tipo declarado en el encabezado de la biblioteca, definido en la fuente de la biblioteca). El complemento incluye el encabezado de la biblioteca, pero no registra nada, solo toma esos objetos y ejecuta las funciones en las direcciones declaradas en el encabezado de la biblioteca. Lo he probado, funciona, espero que no haya problemas si el espacio de direcciones es el mismo para todo el proceso en todas las plataformas. – Nick