2010-09-20 17 views
0

Je suis en train de transférer un programme sur MS Windows. Ce programme utilise des plugins chargés dynamiquement. Les plugins référencent les symboles dans le programme principal. Je ne peux même pas obtenir les DLL après l'éditeur de liens sans que tous les symboles soient résolus. Y a-t-il un moyen de résoudre cela?DLL Obtenir des symboles de son parent (Loader)

Répondre

1

(Désolé, je voudrais demander des éclaircissements dans un commentaire, mais je suis trop d'un débutant à être autorisé.)

Quand vous dites que les plug-ins « symboles de référence dans le programme principal », est-ce qu'il s'agit de référencer des fonctions ou des données? Aussi, quelle langue/compilateur utilisez-vous? En supposant qu'il s'agit uniquement de fonctions, et en C/C++: il est possible d'exporter une fonction à partir d'un fichier .EXE comme s'il s'agissait d'une DLL. Spécifiez simplement __declspec (dllexport) devant la définition de la fonction dans le fichier .EXE. Lors de la compilation du .EXE, un fichier .LIB devrait être généré, que vous pouvez ensuite utiliser comme entrée lors de la liaison de chaque plugin.

+0

Si je comprends bien, vous suggérez que je lier à une version de bibliothèque statique du programme. C'est une bonne idée d'obtenir des copies de fonctions, mais cela ne fonctionnera pas si les fonctions font référence à des variables globales (y compris des statiques) car elles se référeront à une copie différente de la variable. En fait, je présume que ça ne marcherait pas. – Rubinium

+0

Non, en fait. La bibliothèque d'exportation est un fichier .LIB utile à l'éditeur de liens dans la configuration des appels dynamiques. Lorsque vous appelez la fonction en question, il s'agit toujours d'un appel à la DLL (ou dans ce cas, l'EXE). –