5

Linux から mingw とクロスコンパイルを使用して Win32 用のプラグインを開発しています。プラグインはアプリケーションによって正常にロードされ、アプリから com インターフェイスを取得しましたが、そこから関数を呼び出すことができません - アプリがクラッシュしました。これは、mingw のインターフェイス実装の vtable 配置が間違っているためだと思います (これは MSVS で完全に機能しました)。

どんな助けでも感謝します、ありがとう。

4

1 に答える 1

4

VTable アラインメント (実際、VTable システム全体) は完全に実装依存です。リンク後に実行可能なプログラムを作成するには、同じスイッチ/設定でコンパイルされた同じコンパイラを使用する必要があります。

このため、msvc で生成されたバイナリを MinGW で生成されたバイナリにリンクすることはできません。テーブルを同じに揃えたとしても、名前マングリング アルゴリズムは異なり、2 つのコンパイラが vtable 自体内の個々の関数に対して同じ順序を選択するとは誰も言いません。

2 つのコンパイラ間で移植可能なインターフェイスが必要な場合extern "C"は、標準化された ABI を持つ C (技術的には ) インターフェイスを使用する必要があります。

于 2010-11-27T05:18:53.660 に答える