使用不同的返回值声明extern“C”

时间:2012-08-04 20:12:58

标签: c++ assembly return-value extern

我在外部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 code 值) - 布尔值,整数,指针等。

有办法怎么做?我正在编译MSVC10。

感谢。

1 个答案:

答案 0 :(得分:2)

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