0

C ++ Builder XE2の次の最小限の例がアクセス違反を引き起こすのを見て、私は絶対に困惑しています。

実行可能ファイルDLLで構成されるプロジェクトの場合:

Project1.dll / Dummy.h:

class __declspec(dllexport) Dummy : public TObject
{
public:
    __fastcall Dummy();
    __fastcall ~Dummy();
};

Project1.dll / Dummy.cpp:

__fastcall Dummy::Dummy()
: TObject()
{
}

__fastcall Dummy::~Dummy()
{
}

Project2.exe / Unit1.cpp:

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Dummy *d = new Dummy; // access violation occurs in constructor
    delete d;
}

両方のプロジェクトは、デフォルトのプロジェクトオプションを使用してゼロから作成され、両方ともVCLをサポートしています。Dummyから継承しない場合、アクセス違反は発生しませんTObject

私は何が間違っているのですか?

ヘンドリックを応援します

4

1 に答える 1

1

上記のコードは、に置き換える__declspec(dllexport)と機能しPACKAGEます。

私はこれをさまざまなプロジェクト構成でテストしましたが、違いが生じたようです。クラッシュはもうありません。ただし、DLLのロードを遅らせることはできなくなりました。

私にはC++Builderのバグのように見えます。

于 2012-07-30T15:05:44.050 に答える