带有C+的C库+;解决方案 我是C++新手,我在使用GUI和HMI的工业解决方案。 该解决方案是在C++开发的,IM要求界面的HelStAR开发工具包(手势识别)与C++解决方案。 问题是Hillstar库(GestIC)和所有示例都是用C语言开发的。 我的问题是如何在我的C++解决方案中实现这些GIST库。 谢谢。 < P> C++中使用C函数没有问题。您可以编写一个包装器,它调用特定的库函数。

带有C+的C库+;解决方案 我是C++新手,我在使用GUI和HMI的工业解决方案。 该解决方案是在C++开发的,IM要求界面的HelStAR开发工具包(手势识别)与C++解决方案。 问题是Hillstar库(GestIC)和所有示例都是用C语言开发的。 我的问题是如何在我的C++解决方案中实现这些GIST库。 谢谢。 < P> C++中使用C函数没有问题。您可以编写一个包装器,它调用特定的库函数。,c++,C++,只需像所有其他包含一样包含 #include "your library" 现在您可以使用它了。C++通过以下方式声明C函数,从而提供了调用C函数的功能: extern "C" { #include "my-C-code.h" } 你可以从C++中调用C函数,方法与C一样。这样可以防止C++中的名字会导致链接错误。这基本上是鲁尼在回顾时提出的;但不那么神秘。正如他还指出的,如果C文件已经有了这个语句,就没有必要这样做;通过预处理器,可以识别C++编译的IFIFF语句。此说明符关闭名称混乱

只需像所有其他包含一样包含

#include "your library"

现在您可以使用它了。

C++通过以下方式声明C函数,从而提供了调用C函数的功能:

extern "C" {
  #include "my-C-code.h"
}
<>你可以从C++中调用C函数,方法与C一样。这样可以防止C++中的名字会导致链接错误。这基本上是鲁尼在回顾时提出的;但不那么神秘。正如他还指出的,如果C文件已经有了这个语句,就没有必要这样做;通过预处理器,可以识别C++编译的IFIFF语句。此说明符关闭名称混乱,显然仅用于函数定义和主体(尽管它不会干扰预处理器指令)。看来大多数其他C代码都将像C++一样工作。通过这个外部文件包含的一些C标题将不编译-最显著的是那些具有保留C++关键字的函数的函数。

这里你可以找到更多的信息:从“我如何在C++代码中包含非系统C头文件?”部分。

C++代码可以调用C库-有什么问题?只是使用它。唯一需要确保的是,如果c头没有
extern c
,那么您需要在文件中包含它们时添加它。欢迎使用Stack Overflow!请出示你的问题。你应该包括一个你有问题的代码,然后我们可以尝试帮助解决具体的问题。你也应该阅读。是不是需要从C++调用C的包装器?我知道你必须写一个包装器来从C调用C++,但是反过来说,它会更干净,这取决于他需要如何将他的C++解决方案与C库(取决于他想要使用的对象)联系起来。谢谢你的快速回复。但是就像我说的,C++是新的,你能解释如何写包装器并指向一些教程的方向吗?thx@OneManArmy你不需要包装纸。您可以直接进入
#include
并使用类似C的调用
malloc()
free()
就可以了。人们编写代码来包围它是因为他们不喜欢C在C++代码中使用的不同风格。作为注释,如果C代码将存在作为需要连接的单独的对象代码,则需要代码>外部C < /COD>。在这种情况下, ExtCn/*C函数包括文件*/} /CODE。可能不起作用(如果C库不是C++的,那么很可能不这样做)。因为C++名字MunLang.@ AxLIS: C库不需要“C++感知”(不管怎样,它们是如何在C++被发明之前实现C++的认知的?)它是可以调用的。只有当你需要链接一个预编译的二进制文件时,你才能适应C的名字修饰(例如使用<代码>外)C“< /COD>”。@可检查:即使你没有预编译的二进制,你仍然(几乎肯定)必须编译C源代码作为C而不是C++。在C和C++的公共子集中编写代码是可能的,但是编写的C非常小。“C++感知”库是在头文件本身中有
#ifdef\uucplusplus extern“C”{
保护的库(因此给出的答案是有效的)。我怀疑现在大多数C库都是这样做的。