我正在创建应作为模块工作的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
但是什么都没有改变。

问题在哪里? 我应该在构建选项中切换一些内容吗?

===============>>#1 票数: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);

  ask by pszczelaszkov translate from so

未解决问题?本站智能推荐: