«bradtgmurray» - это правильно, но для компиляторов Visual C ++ вам все равно нужно явно экспортировать вашу функцию. Но использование файла .DEF, предложенного "Serge - appTranslator", является неправильным способом сделать это.
Каков универсальный способ экспорта символов в Visual C ++?
Использование инструкции declspec (dllexport / dllimport), которая работает как для кода на C, так и на C ++, независимо от того, оформлены они или нет (тогда как .DEF ограничен C, если вы не хотите украшать свой код вручную).
Таким образом, правильный способ экспорта неокрашенных функций в Visual C ++ - это сочетание идиомы экспорта "C", на что отвечают "bradtgmurray" и ключевого слова dllimport / dllexport.
Пример?
В качестве примера я создал на Visual C ++ пустой проект DLL и написал две функции: одну назвали CPP, потому что он был оформлен, а другую - C, потому что это не так. Код:
// Exported header
#ifdef MY_DLL_EXPORTS
#define MY_DLL_API __declspec(dllexport)
#else
#define MY_DLL_API __declspec(dllimport)
#endif
// Decorated function export : ?myCppFunction@@YAHF@Z
MY_DLL_API int myCppFunction(short v) ;
// Undecorated function export : myCFunction
extern "C"
{
MY_DLL_API int myCFunction(short v) ;
} ;
Полагаю, вы уже знаете, но ради полноты макрос MY_DLL_API должен быть определен в make-файле DLL (т.е. VCPROJ), но не пользователями DLL.
Код на C ++ легко написать, но для полноты я напишу его ниже:
// Decorated function code
MY_DLL_API int myCppFunction(short v)
{
return 42 * v ;
}
extern "C"
{
// Undecorated function code
MY_DLL_API int myCFunction(short v)
{
return 42 * v ;
}
} ;