1

目前我正在写一个 cpp-DLL。Afaik 如果另一个 cpp 程序想要使用它们,我必须将这些函数放入一个类和一个命名空间中。但我也想将 DLL 与 Labview 一起使用。Labview 只识别自由的函数,例如既不在命名空间中也不在类中。如何在我的 DLL 中实现它?目前,我设置了一个#define-variable。如果设置了此变量,则函数将包含在命名空间和类中,如果没有,则它们是免费的,但是我必须将整个东西编译两次,然后得到两个单独的 DLL 文件。那么,如果我只想要两个应用程序的一个 DLL 文件,我该怎么办?(请不要让我写两次函数,管理费用更糟糕,我以前尝试过)。或者我是否只需要在不使用命名空间时通过 LoadLibrary() 调用 DLL?
非常感谢!

4

1 回答 1

0

Afaik 如果另一个 cpp 程序想要使用它们,我必须将这些函数放入一个类和一个命名空间中。

这是完全错误的。您根本不需要这样做。相反,DLL 最初是作为 C 函数库引入的。C++ 使用重整名称来表示名称空间/类和参数类型。这方面没有标准。不同的编译器使用自己的方案。

总结一下:

  • 如果您从 dll 中导出简单的 C 函数,这将始终有效。
  • 如果您从命名空间导出类或其他内容,如果其他 .exe/.dll 使用相同版本的编译器编译,这肯定会起作用。如果没有 - 这取决于。

关于LoadLibrary:当您不知道 DLL 的名称或此 DLL 中的函数名称或您不想在进程开始时加载此 DLL 时,应使用它。否则(简单情况)将您的可执行文件与该 DLL 的 implib 链接。这非常适用于简单的 c 函数。LoadLibrary当由于某种原因直接链接不好时应该使用。

于 2013-09-16T19:43:48.323 回答