我在服务器端和客户端都放置了Image组件,客户端抓屏(为TBitmap)后与本地的Image组件相连:Image1.Picture.Assign(BitMap);通过GetOlePicture过程转换为IPictureDisp接口传递:GetOlePicture(Image1.Picture, Pic); Monitor.Set_Picture(Pic);其中Monitor是自动化服务器的接口。当运行到这里的时候就报错:“灾难性故障”百思不得其解,望高手指教!!!
客户端程序:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, JianShiSrv_TLB, ExtCtrls, StdCtrls, Buttons, AxCtrls, ActiveX;
type
TForm1 = class(TForm)
Image1: TImage;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
Monitor:IJianShi;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Monitor:=CoJianShi.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Monitor:=nil;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
DeskWnd, DeskDC:LongWord;
BitMap:TBitMap;
Pic:IPictureDisp;
begin
DeskWnd:=GetDesktopWindow();
DeskDC:=GetDC(DeskWnd);
BitMap:=TBitMap.Create;
try
BitMap.Width:=Screen.Width;
BitMap.Height:=Screen.Height;
Bitblt(BitMap.Canvas.Handle,0,0,Screen.Width,Screen.Height,
DeskDC,0,0,SRCCOPY);
Image1.Picture.Assign(BitMap);
GetOlePicture(Image1.Picture, Pic);
Monitor.Set_Picture(Pic);
finally
BitMap.Free;
ReleaseDC(DeskWnd,DeskDC);
end;
end;
end.
服务器端:
unit JianShi;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
ComObj, ActiveX, JianShiSrv_TLB, StdVcl, AxCtrls, Graphics;
type
TJianShi = class(TAutoObject, IJianShi)
protected
procedure Set_Picture(const Picture: IPictureDisp); safecall;
end;
implementation
uses ComServ, MainForm;
procedure TJianShi.Set_Picture(const Picture: IPictureDisp);
var
Pic:TPicture;
begin
Pic:=TPicture.Create;
SetOlePicture(Pic, Picture);
Form1.Image1.Picture.Assign(Pic);
end;
initialization
TAutoObjectFactory.Create(ComServer, TJianShi, Class_JianShi,
ciMultiInstance, tmApartment);
end.
MainForm是主窗口,上边放置了Image组件,没有其他。
请高手指点!!!!!!!!!!!!!!!!!1
客户端程序:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, JianShiSrv_TLB, ExtCtrls, StdCtrls, Buttons, AxCtrls, ActiveX;
type
TForm1 = class(TForm)
Image1: TImage;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
Monitor:IJianShi;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Monitor:=CoJianShi.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Monitor:=nil;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
DeskWnd, DeskDC:LongWord;
BitMap:TBitMap;
Pic:IPictureDisp;
begin
DeskWnd:=GetDesktopWindow();
DeskDC:=GetDC(DeskWnd);
BitMap:=TBitMap.Create;
try
BitMap.Width:=Screen.Width;
BitMap.Height:=Screen.Height;
Bitblt(BitMap.Canvas.Handle,0,0,Screen.Width,Screen.Height,
DeskDC,0,0,SRCCOPY);
Image1.Picture.Assign(BitMap);
GetOlePicture(Image1.Picture, Pic);
Monitor.Set_Picture(Pic);
finally
BitMap.Free;
ReleaseDC(DeskWnd,DeskDC);
end;
end;
end.
服务器端:
unit JianShi;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
ComObj, ActiveX, JianShiSrv_TLB, StdVcl, AxCtrls, Graphics;
type
TJianShi = class(TAutoObject, IJianShi)
protected
procedure Set_Picture(const Picture: IPictureDisp); safecall;
end;
implementation
uses ComServ, MainForm;
procedure TJianShi.Set_Picture(const Picture: IPictureDisp);
var
Pic:TPicture;
begin
Pic:=TPicture.Create;
SetOlePicture(Pic, Picture);
Form1.Image1.Picture.Assign(Pic);
end;
initialization
TAutoObjectFactory.Create(ComServer, TJianShi, Class_JianShi,
ciMultiInstance, tmApartment);
end.
MainForm是主窗口,上边放置了Image组件,没有其他。
请高手指点!!!!!!!!!!!!!!!!!1
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货