MyCode:
unit IDataModule;
interface
uses MemDS, DBAccess, MyAccess;
type
TIDM = interface
['{CE4B0AA7-CE04-4F67-A107-409A5F9DC189}']
function SysCon : TMyConnection;
function DayCon: TMyConnection;
end;
var
IDM: TIDM; implementation
end.
unit DataModule;
interface
uses
SysUtils, Classes, DB, IDataModule, MemDS, DBAccess, MyAccess;
type
TDM = class(TDataModule, TIDM)
conSys: TMyConnection;
conDay: TMyConnection;
private
{ Private declarations }
public
{ Public declarations }
function SysCon : TMyConnection;
function DayCon : TMyConnection;
end;
implementation
{$R *.dfm}
{ TDM }
function TDM.DayCon: TMyConnection;
begin
Result := conDay;
end;
function TDM.SysCon: TMyConnection;
begin
Result := conSys;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, StdCtrls, Grids, DBGrids, DBAccess, MyAccess, MemDS, IDataModule;
type
TForm3 = class(TForm)
DBGrid1: TDBGrid;
Button1: TButton;
DataSource1: TDataSource;
qry1: TMyQuery;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
function SetIDM(aIDM : TIDM) : Boolean;
function ShowForm(App : TApplication) : TForm;
exports
SetIDM,
ShowForm;
implementation
{$R *.dfm}
function SetIDM(aIDM : TIDM) : Boolean;
begin
try
IDM := aIDM;
Result := True;
except
Result := False;
end;
end;
function ShowForm(App : TApplication) : TForm;
begin
Result := TForm3.Create(Application);
Result.Show;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
con: TMyConnection;
begin
con := TMyConnection.Create(nil);
con.AssignConnect(IDM.SysCon);
qry1.Connection := Con;
if con.Connected then begin
qry1.Open; // here => Invalid class typecast
end else
qry1.Close;
FreeAndNil(con);
end;
end.
Invalid class typecast in bpl(dll)
-
AndreyZ