我正在設計一個至少在mingw和msvC++之間必須是二進制兼容的API。到目前爲止,我只限於使用函數來獲取和返回原始數據類型或指向具有統一成員的POD結構的指針(即成員都是相同類型,這會降低不兼容填充的風險)。從stdcall dll函數返回結構是否安全?
雖然在某些時候按值返回結構會很方便,因此被調用者不需要保留臨時副本。所以問題是:當被調用者是由不同的編譯器編譯而不是調用者時,是否可以通過值將結構傳遞給/從stdcall函數安全?這仍然適用於最新版本的msvc和mingw嗎?我會更有信心,但我發現this topic用cdecl調用約定討論了這種情況下的一個問題,顯然這隻能在4.6版本中解決。
我其實已經試過了,它不會編譯。那麼,在該公約中,通過價值傳遞結構是不可能的呢?這很快就會解決這個問題。 – Medo42 2011-05-30 21:20:27
你應該堅持傳遞指針,因爲通過價值傳遞結構通常是一個壞主意(除非它們適合寄存器,但即使如此...)。 – Necrolis 2011-05-31 14:03:28