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

独自のバリアント型(各型が含まれる共用体)を作成するか、より強く提案するように、それぞれが1つの特定の型のみを返すさまざまな関数を作成します。

于 2012-08-04T20:21:01.543 に答える