【问题标题】:Can I let a function call soft coded? [closed]我可以让函数调用软编码吗? [关闭]
【发布时间】:2016-04-10 14:49:26
【问题描述】:

我想做一个单元测试驱动程序。
它读取tests.txt,内容如下:

I32 cdecl32 func(in I32, in szC8P32, out I32P32, out sC8P32)
in  in      out out     ret out out ret ...
16  test    5   test2   1

被调用者有这样的声明:

int __cdecl func(const int, const char*, int*, char*);

测试驱动使用LoadLibraryGetProcAddress获取函数的地址。
但是,驱动程序不会包含func 的声明。它将用于测试其他功能类型。就像一个通用工具。
参数应通过解析tests.txt 动态给出。

有可能吗?我该怎么办?

【问题讨论】:

  • 我会说在汇编中编写这种代码更容易,因为您只需要将正确的参数推入堆栈和call 内存地址。试图用强类型静态编译语言实现这样的事情是一团糟。
  • @DavidHaim:C 不是强烈类型的!
  • @Olaf 它是强类型但弱检查
  • @DavidHaim:请重新审视定义。它是弱类型的,例如因为从“较大”类型自动转换为“较小”类型和自动类型强制。例如:int i; ... char ch = i;.
  • @DavidHaim:这当然是假设一个在堆栈上传递参数的系统。

标签: c++ c unit-testing visual-c++


【解决方案1】:

您尝试做的事情很棘手。您必须将函数的声明与 TXT 文件中的定义相匹配。如果它们不完全匹配,您将有未定义的行为。

无论如何,你有两个选择:

  1. 测试驱动程序将发出一个带有函数原型的 C 文件,并运行 C 编译器以生成所需的代码。
  2. 使用 libffi,一个专为满足您的需要而设计的库。

【讨论】:

  • 啊...启发了我。对不起我的菜鸟问题...
猜你喜欢
  • 2017-07-04
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2014-03-14
相关资源
最近更新 更多