2010-06-06 11 views
2

je la fonction statique suivante:export DLL d'une fonction statique

static inline HandVal 
       StdDeck_StdRules_EVAL_N(StdDeck_CardMask cards, int n_cards) 

Puis-je exporter cette fonction dans une DLL? Si c'est le cas, comment?

Merci,

Mike

Informations générales:

Je fais cela parce que le code source d'origine est venu avec un projet VS conçu pour compiler une bibliothèque statique (.lib). Pour utiliser ctypes/Python, je convertis le projet en DLL.

J'ai démarré un projet VS en tant que DLL et importé le code source d'origine. Le projet construit dans une DLL, mais aucune des fonctions (y compris des fonctions telles que celle listée ci-dessus) n'est exportée (comme l'a confirmé l'absence de dllexport dans le code source et des outils tels que DLL Export Viewer). J'ai essayé de suivre le conseil général here (créer une fonction d'emballage exportable dans l'en-tête) en vain ... les fonctions ne semblent toujours pas être exportées.

Répondre

8

Vous ne pouvez pas exporter cette fonction à partir d'une DLL. Les fonctions statiques sont équivalentes à private dans ce fichier.

Vous pouvez créer une méthode dans le fichier qui l'appelle et l'exporter.

+0

J'ai travaillé, merci. – MikeRand

1

En définissant une fonction avec statique et en ligne vous garantissez efficacement que ce sera seulement dans les modules qui comprend la définition.

Soit modifier chaque fichier pour supprimer la ligne statique (qui pourrait casser) ou changer tout d'utiliser une directive préprocesseur qui vous permettra d'avoir soit:

#define MYAPI static inline 

ou

#define MYAPI __declspec(dllexport) 

et puis

MYAPI HandVal StdDeck_StdRules_EVAL_N(StdDeck_CardMask cards, int n_cards) 

ou de créer un ensemble de wrappers sous la forme d'un module séparé

__declspec(dllexport) HandVal Public_StdDeck_StdRules_EVAL_N(StdDeck_CardMask cards, int n_cards) 
{ 
    return StdDeck_StdRules_EVAL_N(cards, n_cards); 
} 
Questions connexes