c++ - 声明具有不同返回值的 extern "C"

标签 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 值)—— bool 值、整数、指针等。

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

谢谢。

最佳答案

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

关于c++ - 声明具有不同返回值的 extern "C",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811676/

相关文章:

c++ - 我如何在没有显式函数定义的情况下使用 boost::bind 在 boost::shared_ptr 中保留引用?

c++ - ReadConsoleOutputCharacter - 我需要使用哪些参数?

c# - 应用程序的沙盒虚拟机(C++ 与 C#)

c - 从 BIOS 加载 Linux 操作系统内核

c++ - 如何让 VS2013 停止生成对 __dtol3、__dtoui3 和其他整数类型转换函数的调用?

c++ - cin.fail while循环输入再入

c - 在 .S 中包含头文件以获得一些结构大小

c - 变量返回地址错误

java - 如何在使用方法输出并返回结果时计算字符串中的元音和辅音并将首字母大写

python - 带有递归调用的 return 语句如何在 Python 中保存中间值?