从 C++ 如何执行 C 中的方法或访问结构?

Posted

技术标签:

【中文标题】从 C++ 如何执行 C 中的方法或访问结构?【英文标题】:From C++ how to execute a method or access struct which is in C? 【发布时间】:2017-04-27 07:48:23 【问题描述】:

我需要将字符串值从 C++ 传递到 C 库。 你如何调用CppCallToC 或从.cpp 我如何访问struct rtmp_stream *stream;

C++ 文件:UI/window-basic-main.cpp:

void OBSBasic::Load(const char *file) 
  //From C++ how to go to the C method?
  CppCallToC();

C 文件:plugin/obs-outputs/rtmp-stream.c:

static void CppCallToC() 

  //https://github.com/jp9000/obs-studio/blob/master/libobs/util/dstr.h
  //struct dstr      path, key;
  struct rtmp_stream *stream;
  //dstr_printf(&stream->path,  obs_path);
  //dstr_printf(&stream->key,   obs_key);

【问题讨论】:

std::string 和引用不是 c 1.您不能在不同的函数中访问局部变量; 2. 无论如何你都不能调用那个函数——而且你不应该——因为它是静态的; 3. 这看起来像XY problem。 【参考方案1】:

您的问题不是 C 与 C++ 的问题。 rtmp-stream.c 中的所有函数都声明为静态的,这意味着它们具有内部链接并且不能从不同的编译单元调用。您只能通过在文件末尾定义并在 obs-outputs.c 中声明的 rtmp_output_info 结构间接访问这些函数,甚至该声明也只能在该文件中使用。

我对 OBS Studio 一无所知,所以恐怕无法帮助您。您必须追踪obs_register_output(&rtmp_output_info) 中发生的事情。

【讨论】:

以上是关于从 C++ 如何执行 C 中的方法或访问结构?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++ 源文件访问 C 源文件中的全局变量

我们如何在C,C ++中控制/调度线程的执行?

在 Windows 环境中从 C 或 C++ 访问 COM 接口

如何将结构从 C++ 迁移到 C#

如何从 C++ 中的子类访问父类的成员变量?

如何从 C++ 中的函数返回结构?