2

私はCodeProjectのガイドに従い、抽象インターフェイスを使用して DLL を構築し、extern "C"コマンドを使用__declspec(dllexport)してファクトリ関数をエクスポートし__cdeclました。これを行うことで、DLL がクリーンなインターフェイスでコンパイラに依存しないようになると記事は主張しています。ただし、g++ の 2 つの異なるバージョンで DLL を使用すると、非標準の ABI により、DLL の呼び出しで標準の c++ の問題が発生しました。CodeProject の記事に加えて、クラスの複数のインスタンスを作成できるようにするために、 MinGWの記事も使用しました。

では、DLL コンパイラを独立させるにはどうすればよいでしょうか。これが不可能な場合、DLL 内でクラスをインスタンス化し、関数を純粋な C にしますが、インスタンス化されたクラスに関連する C++ 関数を呼び出すことは可能ですか?

4

1 に答える 1

0

そこに示された例を正確に再現しようとしましたか? で、何が失敗だったの?クラスだけでなく、他のクラスもstd::string直接使用できないことを考慮する必要があります。そうは言っても、車輪の再発明を試みるのではなく、COM のようなある種のコンポーネント フレームワークを使用します。

2番目の部分に答えるには、次のことを考慮してください。

// internal class
struct X
{
    void jump();
};


// compiler-independent C interface
struct X;
struct X* x_alloc(void);
void x_jump(struct X* x, float height);
void x_free(struct X* x);

これは機能します。あなたが何を試し、何がうまくいかなかったのか、正確にはわかりません。伝えるのに十分な情報がありません。

于 2013-05-22T19:25:37.867 に答える