Я создаю DLL, который должен работать в качестве модуля (выполнения загрузки)
Он работает на Linux/Windows с dlopen и т.д ..
Это выглядит как:Визуальная 2015 Компиляция DLL
.cpp
std::string pomnoz(std::string &s, std::string &ds)
{
std::cout << s << " " << ds << std::endl;
return s.append(ds);
}
.h
#ifdef __cplusplus
extern "C"
{
#endif
std::string pomnoz(std::string &s, std::string &ds);
#ifdef __cplusplus
}
#endif
проблема заключается в том, когда я скомпилировать его с г ++ он генерирует ~ 480Kb .DLL, который работает с out на windows/linux (я передаю 2 строки и возвращает их).
Но я не могу использовать g ++ из-за c14, который я использую далее в библиотеке.
В окнах я использую VS2015, он создает 65kb .DLL, который не работает (он загружает, но возвращает null вместо funcptr).
Я попытаюсь удалить #ifdef __cplusplus
Но ничего не меняется.
Где проблема? Я должен переключить что-то в настройках сборки?
проблема заключается в том вам нужно использовать ту же реализацию std :: string между различными модулями в вашей программе. в частности, если хост-программа была скомпилирована с g ++, тогда вы должны скомпилировать вашу dll с g ++. Или вы можете использовать простые строки C вместо C++ std :: string – dsi
Не имеет значения с void() - та же проблема. – pszczelaszkov