Détection de __declspec (dllimport) manquant dans l’access aux éléments globaux exportés au-delà des limites de la DLL

Je cherche des solutions à une nouvelle façon amusante de prendre en charge Windows pour le projet PostgreSQL.

Lorsque les DLL de plug-in sont chargées dans l’exécutable principal avec un appel LoadLibrary ils s’attendent à ce que l’éditeur de liens dynamic résolve les références aux fonctions et aux variables globales exposées par postgres.exe .

Il est facile d’oublier de mettre une annotation __declspec(dllimport) , ou plutôt la macro PGDLLIMPORT qui s’y développe, sur un extern auquel on accède via une DLL, car presque tous les tests et développements PostgreSQL ont lieu sous Linux et OS X, où aucun ce truc s’applique.

Le projet s’appuie sur des tests automatisés pour détecter les cas d’ __declspec(dllimport) une __declspec(dllimport) dans une fonction, car cela entraîne des erreurs de l’éditeur de liens. Jusqu’à hier, on supposait qu’il en était de même pour les variables globales, mais ce n’est pas le cas. il s’avère que la liaison dynamic réussit en silence, produisant un résultat incohérent .

Donc – je cherche des conseils sur la façon de détecter et de prévenir de tels access illégaux, où un global n’est pas __declspec(dllimport) ‘ed.

Ceci est compliqué par le fait que sous Windows, le système de compilation de PostgreSQL génère des fichiers .def qui exportent tout. (Ce n’est pas mon cas, mais je ne peux pas le changer, oui, je sais). Cela signifie que même s’il n’y a pas de PGDLLIMPORT marquant le site __declspec(dllexport) lors de la construction de l’exécutable principal, le symbole est toujours exporté.

Des idées? Existe-t-il un moyen de demander à l’éditeur de liens de extern une erreur d’exécution lorsqu’un global extern est défini dans un autre module et que l’ extern n’est pas correctement annoté __declspec(dllimport) ?

Si le projet cessait de générer des fichiers .def et utilisait à la PGDLLIMPORT annotations PGDLLIMPORT développées en __declspec(dllexport) lors de la compilation du fichier .exe et de __declspec(dllimport) lors de la compilation de plug-ins utilisant l’API de l’exe, des erreurs de l’éditeur de liens seraient-elles générées lorsqu’un symbole n’est pas généré? t annoté correctement? Y a-t-il une alternative à cela?

Je suis actuellement à la recherche de plus d’informations et je vais écrire quelques programmes de test pour tester des idées, mais je suis loin d’être un expert en développement Windows et je recherche une autorité “la bonne façon de fais-le “si possible.