【问题标题】:Passing a struct to a dynamically loaded dll将结构传递给动态加载的 dll
【发布时间】:2012-01-16 14:02:28
【问题描述】:

我有一个动态加载的 dll,上面调用了函数,我想给它传递一个结构。它是动态加载的,因为我不知道在运行时之前我将使用哪个版本的 dll。

首先,我应该通过值还是引用?

其次,我在哪里声明这个结构,以便它对 dll 及其调用者都可用(我假设它必须对两者都可用)。

如果我在接受它作为参数的同一个 dll 中声明它,那么 dll 的任何潜在用户都必须静态链接到 dll,以便它可以访问结构声明,这就是我最初想要的避免。

【问题讨论】:

  • 我还以为结构声明会在头文件中?
  • 您基本上是在问“如何确保我的代码在加载错误的 DLL 版本时最快地崩溃?”按值最好,它会使堆栈指针不平衡。

标签: c++ dll struct


【解决方案1】:

首先,我应该通过值还是引用?

这取决于,例如this question.

其次,我在哪里声明这个结构,以便 dll 及其调用者都可以使用它

您在两者都使用的头文件中声明它。该结构是在编译时声明的,不需要链接到任何库。

【讨论】:

  • 谢谢 Georg,你能详细说明一下我在其中声明结构的这个标题吗?它会是为我的 dll 声明 c 接口的同一个标头吗?我是否只创建一个独立的头文件,并将其包含在两个项目中?由于两个项目都是 c++,我是否将声明放在 extern "C" 指令中?请原谅我无知的问题。
  • @pingu:将结构放在哪里取决于您的项目 - 但它应该放在主机的标题中;您定义接口的标题将是一种可能性。该结构不需要extern "C"。由于双方都是 C++,根据您的设置,您可能只需要 extern "C" 来获得一个功能。参见例如here 询问有关此类设置的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多