DLL экспорт статической функции - PullRequest
3 голосов
/ 06 июня 2010

У меня есть следующая статическая функция:

static inline HandVal
              StdDeck_StdRules_EVAL_N( StdDeck_CardMask cards, int n_cards )

Можно ли экспортировать эту функцию в DLL? Если да, то как?

Спасибо

Mike

Справочная информация:

Я делаю это потому, что исходный исходный код поставлялся с проектом VS, предназначенным для компиляции в виде статической (.lib) библиотеки. Чтобы использовать ctypes / Python, я конвертирую проект в DLL.

Я запустил проект VS как DLL и импортировал исходный код. Проект встраивается в DLL, но ни одна из функций (включая функции, подобные перечисленным выше) не экспортируется (что подтверждается как отсутствием dllexport в исходном коде, так и такими инструментами, как DLL Export Viewer). Я пытался следовать общему совету здесь (создать экспортируемую функцию-обертку в заголовке), но безрезультатно ... функции все еще не экспортируются.

Ответы [ 2 ]

9 голосов
/ 06 июня 2010

Вы не можете экспортировать эту функцию из DLL. статические функции эквивалентны приватным для этого файла.

Вы можете создать метод в файле, который вызывает его, и экспортировать его.

1 голос
/ 06 июня 2010

Определяя функцию с помощью static и inline , вы фактически гарантируете, что это будет только в модулях, включающих определение.

Либо отредактируйте каждый файл, чтобы удалить статический встроенный (который может сломаться), либо измените все, используя директиву PreProcessor, которая позволит вам иметь:

#define MYAPI static inline

или

#define MYAPI __declspec(dllexport)

, а затем

MYAPI HandVal StdDeck_StdRules_EVAL_N( StdDeck_CardMask cards, int n_cards )

или создайте набор оболочек в виде отдельного модуля, который выполняет

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