从DLL中的TObject派生时访问冲突

时间:2012-07-30 12:28:25

标签: dll c++builder

我非常困惑地看到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继承,则不会发生访问冲突。

我做错了什么?

欢呼声 亨德里克

1 个答案:

答案 0 :(得分:1)

如果您将__declspec(dllexport)替换为PACKAGE,则上述代码有效。

我已经在各种项目配置中对此进行了测试,它似乎有所不同 - 不再崩溃了。但是,我无法再延迟加载DLL了。

在我看来就像是一个C ++ Builder错误。