少なくとも mingw と msvc++ の間でバイナリ互換でなければならない API を設計しています。これまでのところ、プリミティブ データ型または均一なメンバーを持つ POD 構造体へのポインターを取得して返す関数の使用に制限してきました (つまり、メンバーはすべて同じ型であり、互換性のないパディングのリスクを軽減する必要があります)。
ただし、呼び出し先が一時コピーを保持する必要がないように、構造体を値で返すと便利な場合があります。質問は次のとおりです。呼び出し先が呼び出し元とは異なるコンパイラによってコンパイルされた場合、stdcall 関数との間で値によって構造体を渡すことは安全ですか? これは、msvc と mingw の最近のバージョンよりも古いバージョンでも有効ですか? 私はそうであることに自信を持っていますが、このトピックは、明らかに mingw 4.6 でのみ解決された cdecl 呼び出し規約を使用したこの正確な状況の問題を議論しているのを見つけました。