我正在创建应作为模块工作的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

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

1回复

在Visual Studio 2015中编译的DLL会引发0xc000007b错误

它让我疯狂。 我想创建一个基本的DLL挂钩(出于严格的参考目的,等等) 我的程序是32位的,所以我正在编译DLL。 因此,我在Visual Studio 2015中制作了一个空DLL项目(只是为了检查我的程序是否将其选中),然后将“输出文件名”设置为dinput8.dll。
1回复

使用旧版dll进行Visual Studio 2015调试

我正在尝试在Windows 10-Visual Studio 2015下从OpenCV调试示例应用程序 。 我已经根据OpenCV Wiki配置了Visual Studio,并且可以编译该应用程序并正常运行。 我遇到的问题是尝试调试应用程序时。 我得到该程序无法启动,因为缺少MSV
6回复

在VC ++编译的应用程序中使用G ++编译的DLL(插件)时会出现什么问题?

我使用Visual C ++编译器编译的应用程序。 它可以以.dll形式加载插件。 它究竟是什么确实无关紧要,事实是: 这包括从.dll调用函数,返回指向Applications API对象的指针等。 我的问题是,当应用程序从.dll调用函数时,可能会出现什么问题,从中检索指针
1回复

我可以将Visual Studio 2015头文件编译为dll并在VS2013中使用它吗?

背景:我想在Windows中使用mlpack进行办公室工作,但是由于某些支持原因,办公环境受Visual Studio 2013的限制。为了使用mlpack,我需要使用VS2015。 因此,我在个人计算机上使用VS2015编译了mlpack(此后-keon.io/mlpack/mlpack-o
1回复

使用抽象接口的C ++编译器独立DLL

我按照CodeProject上的指南进行操作,并构建了一个具有抽象接口的DLL,并使用extern "C"命令以及__declspec(dllexport)和__cdecl导出了工厂函数,并且通过这样做,本文声称该DLL变得干净而独立于编译器接口。 但是,当在两个不同版本的g ++上使用DLL
1回复

共享对象(DLL)问题

我有一个关于共享对象(或DLL)的问题。 我正在为我的游戏引擎开发一个插件加载器。 不过,在开始这样做之前,我需要回答一个问题。 如果我使用外部函数加载数据,我可以卸载我的共享对象吗? 这是一个小代码片段: 当我调用dclose时,数据是否会被取消引用?
2回复

在Linux中使用.lib和.dll文件

我必须使一个项目在Linux机器上成功运行。 现在我的项目在Windows机器上运行得很好。 在Windows机器上它正在编译并正常工作。 我的项目使用一个“.lib”和一个“.dll”文件在Windows上成功完成任务。 我可以在linux机器上使用相同的.lib文件和.dll文件来成
1回复

使用C ++代码中的DLL中定义的函数

我从源(dll)构建了Qt,并试图构建一个使用Qt dll的应用程序。 我没有太多的C ++经验,所以我遇到了我确定是非常基本的问题。 我的构建在包含上失败,并出现如下错误: 这是我正在使用的g ++命令(我也使用-L将正确的文件夹添加到lib路径,但这也不起作用): 我
2回复

找不到libcurl-x64.dll

我收到一个非常奇怪的错误。 我正在编译使用libcurl从URL解析JSON数据的代码。 经过反复试验,我已将其编译为没有错误。 但是,当尝试运行代码时,出现系统错误,提示未找到libcurl-x64.dll。 错误图片我不确定在这里找到什么。 我的Windows系统找不到libcur
1回复

如何将c ++ dll链接到c#visual studio 2015 [重复]

这个问题已经在这里有了答案: 为什么Cdecl调用在“标准” P /调用约定中经常不匹配? 2个答案 我的问题从主题很清楚,我需要将字符串从C#发送到C ++函数,反之亦然(术语可能不正确,我是菜鸟),所以我看了本教程: https : //www.youtube