1

我在外部 ASM 文件中定义了一个名为ecall的函数。此函数采用不同数量的参数并返回不同的值。

这是它在我的源代码中的样子:

int ret = _function1("Hello", "world");
HANDLER h = _function2(123456);
char * ch = _function3("asdf", 789, h);
// ... and so on

这些“函数”实际上是使用简单的 python 脚本生成的宏。这个自动生成的头文件定义了所有这些宏,如下所示:

extern "C" ????? ecall(int code, ...);

#define _function1(...) ecall(0x123, __VA_ARGS__)
#define _function2(...) ecall(0x234, __VA_ARGS__)
#define _function3(...) ecall(0x345, __VA_ARGS__)
#define _function4(...) ecall(0xABC, __VA_ARGS__)
// ... and around 500 more definitions with a different code value

但是,我被困在ecall的声明中(我已标记为“?????”)。我需要以某种方式指定返回值,但实际上这个函数返回几乎所有内容(取决于int 代码值)——布尔值、整数、指针等。

有没有办法做到这一点?我正在 MSVC10 上编译。

谢谢。

4

1 回答 1

2

要么创建你自己的变体类型(包含每种类型的联合),或者像我更强烈建议的那样,创建不同的函数,每个函数只返回一个特定类型。

于 2012-08-04T20:21:01.543 回答