我正在创建应该作为模块工作的DLL(运行时加载)
它适用于带有dlopen等的linux / windows
它看起来像:
的.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
问题是当我用g ++编译它时会生成~480kb .DLL,它在windows / linux上没有问题(我传递2个字符串并返回它)。
但我不能使用g ++,因为我在库中进一步使用了c14
在我使用VS2015的Windows上,它创建了65kb .DLL无效(它加载但返回null而不是funcptr)。
我试图删除#ifdef __cplusplus
但没有任何改变。
哪里有问题?我应该在构建选项中切换一些内容吗?
答案 0 :(得分:0)
您缺少pomnoz
功能旁边的dllexport:
__declspec(dllexport) std::string pomnoz(std::string &s, std::string &ds);
然后在您的应用程序中,您可以动态加载dll并将地址检索到导出的函数:
HMODULE lib = LoadLibrary(L"test.dll");
typedef std::string(*FNPTR)(std::string&, std::string&);
FNPTR myfunc = (FNPTR)GetProcAddress(lib, "pomnoz");
if (!myfunc)
return 1;
std::string a("a");
std::string b("b");
myfunc(a, b);