Dinamicamente Carregando módulos externos em um programa C?
-
03-07-2019 - |
Pergunta
Estou certo de que este problema foi resolvido antes e estou curioso como o seu feito. Eu tenho o código em que, quando executado, eu quero verificar o conteúdo de um diretório e de carga em termos de funcionalidade.
Especificamente, eu estou trabalhando com um mecanismo de script que eu quero ser capaz de adicionar chamadas de função para. Eu quero que o motor principal para fornecer a funcionalidade muito limitada. O usuário deve ser capaz de adicionar funções adicionais através de bibliotecas 3o partido, o que eu quero o motor para procurar e carga. Como isso é feito?
Solução
Depende da plataforma. No win32, você chama LoadLibrary
para carregar uma DLL, em seguida, obter funções dele com GetProcAddress
. Em plataformas UNIXy, os equivalentes são dlopen
e dlsym
.
Outras dicas
Você pode usar o POSIX dlopen / dlsym / dlerror / dlclose funções em Linux / UNIX para bibliotecas compartilhadas dinamicamente abertas e acesso aos símbolos (incluindo funções) eles fornecem, consulte o homem página para mais detalhes.
Se você quiser usar uma biblioteca para isso, eu recomendo GLib (a biblioteca utilitário que está por trás do kit de ferramentas GTK + UI). Ele apresenta o " gmodule " sub-API, que fornece uma maneira limpa, portátil de fazer isso. Isso evita que você tenha de envolver as chamadas relevantes si mesmo, e também traz para você o resto da GLib que é muito útil para ter em programas C de qualquer tamanho.