3

このインターフェイスが 1 つのバイナリで定義されているとします。

struct ISomething
{
    virtual void __stdcall DoSomething() = 0;
};

別のバイナリで定義されたこの関数シグネチャは安全ですか?

bool __stdcall RunSomething(const ISomething &something);

または、そうでなければなりませ

bool __stdcall RunSomething(const ISomething *something);

( Visual Studio 以外のコンパイラでは何もない__stdcallと仮定します。)#define

4

1 に答える 1

0

参照はバイナリ間で正常に機能するはずです。それらは、ポインタとしてアセンブリレベルで実装されます。これの例は、Standard C ++およびBoostライブラリ(多分)にあると思いますstd::string::string(const std::string&)

バイナリが同じコンパイラとバージョンで構築されていない場合は、名前のマングリングで問題が発生する可能性がありますが、それは参照とは関係ありません。

于 2012-12-31T17:36:30.830 に答える