【发布时间】:2012-07-30 12:28:24
【问题描述】:
看到以下 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,则不会发生访问冲突。
我做错了什么?
干杯 亨德里克
【问题讨论】:
-
也许 DLL 是发布版本,而 Project2 是调试版本,反之亦然?
-
好主意,但不行。调试和发布版本中的访问冲突。
-
两个项目的
Project Options > Linker > Use dynamic RTL和Project Options > Packages > Build with runtime packages的状态如何? -
两个项目:Link with dynamic RTL = true,Build with runtime packages = true,并且运行时包列表似乎包含了我系统上安装的所有包
-
您可以尝试取消选中 DLL 和项目的
link with dynamic RTL并重建它吗?
标签: dll c++builder