Het lijkt erop dat ik gelijk heb.
Ik zal even uitleggen hoe je deze bug reproduceert:
Stap 1: Maak een project-groep met een normale VCL-applicatie erin en een DLL project. Dan heb je dus twee projecten, waarvan er eentje (de applicatie) één unit heeft.
Stap 2: Zet het volgende in de DLL:
Code:
library MijnDLL;
uses
SysUtils,
Windows,
Classes;
{$R *.res}
procedure EenRoutine; stdcall;
begin
Beep(1000,1000);
end;
exports EenRoutine;
begin
Assert(false,'Deze tekst wil ik zien');
end.
We laten hier dus een assert failen. Deze geeft een exception die blijkbaar niet goed afgevangen word door de debugger. EenRoutine is alleen nodig om ervoor te zorgen dat de DLL statisch ingeladen word.
Stap 3: Vervolgens maken we een FormCreate event in onze applicatie, waarin we EenRoutine aanroepen. Het ziet er bij mij zo uit:
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure EenRoutine; stdcall external 'MijnDLL.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
EenRoutine;
end;
end.
Stap 4: We stellen bij Run > Parameters de host van onze DLL in.
Stap 5: Vervolgens even de hele handel opslaan en runnen. Het DLL-project moet "MijnDLL.dpr" genoemd worden.
Ik krijg hier toch echt een AV + CPU window te zien i.p.v een EAssertionFailed. Moet ik dit aan borland melden of ligt het aan mijn PC ofzo. Ik draai trouwens Vista 32 bit met Delphi 7 (Maar dat laatste maakt volgens mij geen verschil want D2007 lijkt hetzelfde probleem te hebben).
Wil iemand dit voor me proberen??
Heel erg bedankt!!
Bookmarks