C++ 宣布“外部”;";具有不同的返回值

C++ 宣布“外部”;";具有不同的返回值,c++,assembly,return-value,extern,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"

我在外部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上编译


谢谢。

要么创建自己的变体类型(包括每种类型的联合),要么正如我更强烈的建议,创建不同的函数,每个函数只返回一种特定类型。

生命、宇宙和一切的答案是什么
void*
建议您避免使用以下划线开头的名称;它们是为实现保留的。为什么要在一个汇编函数后面隐藏500个不同的函数?为什么不使用500个不同的函数呢?ecall中是否有一些巨大的
开关(code){/*case 0x123…*/}
?如果是这样的话,与简单地创建多个类型明确声明的函数相比,这有什么好处?@dgnoton不,这只是一小段ASM代码,我用它作为中间层来混淆和隐藏不同的API调用。当我显式声明返回值时,它工作得很好,但是我需要自动生成这些定义,我的python代码不知道特定函数将返回什么类型。正如我所说的,这个头文件是自动生成的,python脚本不知道将返回什么类型。这个ASM函数用作来自外部库的API调用的中间层,因此我无法将它们的返回值更改为仅一种特定类型。您可以控制python脚本的源代码吗?还是.asm源?如果是这样的话,我不明白为什么你不能改变一些东西来保证“胶水”类型的安全。例如:
while(function1(event,1000)==WAIT\u TIMEOUT)
。python脚本如何找出函数1的返回类型?我不知道如何生成宏。。实际上是解析和分析使用ASM函数的代码吗?确切地说,我的python脚本解析项目中的所有相关函数,并在自动生成的头文件中将它们重新定义为宏。唯一的问题是如何在C++中声明ASM函数。