75 votes

Exporter tous les symboles lors de la création d'une DLL

Avec VS2005, je veux créer une DLL et exporter automatiquement tous les symboles sans ajouter __declspec(dllexport) partout et sans créer manuellement des fichiers .def. Existe-t-il un moyen de faire cela ?

0voto

Peut-être que quelqu'un trouvera utile mon script Python pour convertir .dump en .def.

import sys, os
functions = []
startPoint = False
# Exclude standard API like sprintf to avoid multiple definition link error
excluded_functions = [ 'sprintf', 'snprintf', 'sscanf', 'fprintf' ]

if len(sys.argv) < 2:
    print('Usage: %s <Input .dump file> <Output .def file>.' % sys.argv[0])
    print('Example: %s myStaticLib.dump exports.def' % sys.argv[0])
    sys.exit(1)
print('%s: Processing %s to %s' % (sys.argv[0], sys.argv[1], sys.argv[2]))

fin = open(sys.argv[1], 'r')
lines = fin.readlines()
fin.close()

# Reading
for l in lines:
    l_str = l.strip()
    if (startPoint == True) and (l_str == 'Summary'): # end point
        break
    if (startPoint == False) and ("public symbols" in l_str):
        startPoint = True
        continue
    if (startPoint == True) and l_str is not '':
        funcName = l_str.split(' ')[-1]
        if funcName not in excluded_functions:
            functions.append("    " + funcName)
# Writing
fout = open(sys.argv[2], 'w')
fout.write('EXPORTS\n')
for f in functions:
    fout.write('%s\n' % f)
fout.close()

Avec ce script, vous pouvez obtenir le fichier .def pour votre .lib en deux étapes :

dumpbin /LINKERMEMBER:1 myStaticLib.lib > myExports.dump
python dump2def.py myExports.dump myExports.def

-3voto

Adam Mitz Points 4540

Non, vous aurez besoin d'une macro qui se résume à __declspec(dllexport) lorsqu'il est inclus par le fichier .cpp qui implémente les fonctions exportées, et se résout en __declspec(dllimport) autrement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X