c++ - VxWorks spyLib 的可变函数指针定义不清楚

标签 c++ c++98 vxworks

我正在使用 VxWorks 6.9 并尝试使用一些 spyLib.h 函数,但我在寻找预期的签名时遇到问题,因为类型是可变的。

vxTypesOld.h 中我找到了我的类型:typedef int (*FUNCPTR) (...);

spyLib.h 中我有我的函数调用:extern void spyReportCommon (FUNCPTR printRtn);

但是 printRtn 需要哪些函数参数?我猜 C 风格的字符串是一个,但我不知道表的每一行是一个字符串还是它是一个字符串数组,甚至是一个大字符串。

在我知道数据以何种形式传递到函数中之前,我无法开始编写从输出数据中解析数据的函数。

我唯一确定的是它返回一个 int(例如 int parsePrint( ????? );)

这是我的报告尝试:

#include <vxworks.h>
#include <spyLib.h>
#include <usrLib.h>

int ParseSpy(const char * spyOutput); // this is a guess

void Startup()
{
    //startup logic

    // the compiler said and int param is expected but the .h had void
    spyLibInit(1); 

    spyCommon(1,50, (FUNCPTR) &ParseSpy);
}

int ParseSpy(const char * spyOutput){} // this is a guess

我遇到了意外的编译器错误:“spyCommon”未在范围内声明 但如您所见,spyLib.h 已包含在内,所以我对此感到有点困惑。

最佳答案

这看起来是个糟糕的设计。如果不知道参数是什么,打印函数将无法打印。至少需要一个参数来指定其余参数是什么。

查看 source并搜索“printRtn”,我看到所有对打印函数的调用都需要一个类似 printf 的函数,其中第一个参数是格式字符串。你的函数最好写成

int ParseSpy(const char * spyOutput, ...);

关于丢失的spyCommon,您可以尝试让VxWorks 将预处理器输出写入文件以检查编译器看到的内容。可能您收到了错误的 spylib.h 文件或者该文件被 #if 隐藏的内容。

关于c++ - VxWorks spyLib 的可变函数指针定义不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62397175/

相关文章:

c++ - 使用 fstream 从文本文件中读取数据

vxworks - VxWorks调度程序如何执行?

sqlite - 在 VxWorks 上将 SQLite 集成到 RTP 应用程序中时 pthreads 崩溃

c++ - 最终迭代时简单的 'for' 循环崩溃程序

c++ - 使用字符串流时如何停止 double 转换为科学计数法

c++ - 从 argv[1] 获取数组的大小并用随机数填充它

c++ - 将 std::map 的数据拆分为多个 std::vectors

c++ - 创建自己的owner_ptr类;传递堆栈或静态分配地址时如何避免UB?

linux - vxworks 中的任务

c++ - 校验和计算