c++ - 如何在 DLL 中返回 vector ?

标签 c++ c memory dll

我为我的应用程序开发了一个插件系统。 我的软件是用MFC/c++编写的

我选择从 DLL 导入函数。 但我面临一个问题。 我已经使用 std 库进行了编写,但是 SO 向我表明“如果基于模板,则将任何内容传入和传出 DLL 时都会存在危险”

所以我开始重写它。但现在我找不到好的解决方案。 该 dll 将解析 Youtube 并以如下结构返回结果:

struct VideoInfo{
wchar_t* strName;
wchar_t* strURL;
int iDuration;
float fRate;
};

但是将是其中的 50 个,在我之前的代码中我只是返回了 std::vector<VideoInfo*> *vecVideos;但我怎样才能以安全的方式做到这一点?

最佳答案

您可以创建一个链接列表并返回它,而不是返回 vector 。

无需担心不兼容,而且使用简单:

struct Node
{
    VideoInfo vi;
    Node *Next;
};

当您构建视频列表时,只需执行以下操作:

Node *ptr = new Node();
ptr->vi = MyVideoInfo; // Assumes MyVideoInfo is the new video
ptr->Next = current;
current = ptr; // Assuming current is our current linked list

您甚至可以在 c 中使用它,因为您只需将其包装在 extern "C"{} 中并将 typedef 添加到节点声明的前面。

关于c++ - 如何在 DLL 中返回 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5373553/

相关文章:

c - 如何判断char数组表示的数字是否会溢出int?

c - 我需要将以 C(.c) 编写的代码转换为程序集 (.asm)。我对用 C 语言编写非常陌生,现在我需要学习如何用汇编语言编写

c++ - 最大内存分配?

c++ - 在堆上分配内存还是传递工作内存?

c++ - 如何安装 OpenCV 3.3.1。跟踪 API (Ubuntu 16.04)

c++ - APR(Apache 可移植运行时)1.3 和 0.9 之间有什么区别?

c++ - 使用从文件中获取的维度创建一个双数组

c - 如何将 "bc"的输出存储到变量中?

python - 调用 OpenCV 函数时原始 numpy 数组会发生什么?

c++ - 对 `Static Class Member variable inside Static member function' 的 undefined reference