• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

请教一个com问题

jxauyhj 2005-03-18 12:25:54
Type
TMapObj = Class(TControl)
Private
AMap : TMap;
MesCon : TControl;
ADataSet : TADODataSet;
LocalList : TStringList;
OriStyle : CMapXStyle;
MouseFlag,DataFlag : integer;
Procedure DeleteMapinfoFiles(SysPath : String);
Procedure MouseMoveEvent(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
Public
Constructor Create(AOwner : TMap);Reintroduce;
Destructor Destroy ; override;
Function ListMaps : TStringList;
Procedure InitMap(Flag : integer ;SysPath : String;AStyle : CMapXStyle ;ADataSet : TADODataset);
Procedure InitDataSet(Var ADOConn : TADOConnection);
Procedure SetMouseListening(Flag : integer);
Procedure GetCSLayerData(Proc_str : string);
Procedure Initlayers(SysPath : String );
Procedure SetCSLyrVisible(ISvisible : Boolean);
Procedure SetCSLyrStyle;
procedure SetCSLabelVisibleForCCH(isvisible : boolean);
Procedure SetDTLyrVisible(ISVisible : Boolean);
Procedure SetDTLyrStyle;
Procedure ZoomToLyr(LyrName : String);
Procedure LocateAtPoint(Longitude , Latitude : Real);
Procedure RegMes(Sender : TControl);
Procedure ListeningMouseLocation(List : TStringList);
procedure importbaseMap(FileDir: string);//导入地图
end;
就是把这个TMapObj 封装成com,不知道怎么处理那些com中没有的数据类型
...全文
66 点赞 收藏 6
写回复
6 条回复
jxauyhj 2005年03月24日
自己顶!
回复 点赞
jxauyhj 2005年03月21日
不知道是不是破解的Mapx的原因,我把TMap改为TUnknow后,所有用到TMap的地方都出错了,不能编译
回复 点赞
jxauyhj 2005年03月21日
unit MapObjSvr;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
Windows, ActiveX, Classes, ComObj, MapDll_TLB, StdVcl,MapUnit;

type
TMapObject = class(TTypedComObject, IMapObject)
private
Mapobject : TMapObj;
protected
procedure Create(const AOwner: IUnknown); stdcall;
procedure GetCSLayerData(const Proc_str: WideString); stdcall;
procedure InitDataSet(var ADOConn: OleVariant); stdcall;
procedure Initlayers(const SysPath: WideString); stdcall;
public
procedure Initialize;override;
destructor destroy;override;
end;

implementation

uses ComServ;

procedure TMapObject.Create(const AOwner: IUnknown);
begin
Mapobject := TMapObj.Create(AOwner); //这里不能编译 错误
end;

destructor TMapObject.destroy;
begin
Mapobject.Free;
inherited;
end;

procedure TMapObject.GetCSLayerData(const Proc_str: WideString);
begin
Mapobject.GetCSLayerData(Proc_str);
end;

procedure TMapObject.InitDataSet(var ADOConn: OleVariant);
begin
// Mapobject.InitDataSet(ADOConn); //这里也不能编译 ADOConn 是一个TADODataSet
end;

procedure TMapObject.Initialize;
begin
inherited;

end;

procedure TMapObject.Initlayers(const SysPath: WideString);
begin
Mapobject.Initlayers(syspath);
end;

initialization
TTypedComObjectFactory.Create(ComServer, TMapObject, Class_MapObject,
ciMultiInstance, tmApartment);
end.
错误为 :
[Error] MapObjSvr.pas(30): Incompatible types: 'TMap' and 'IInterface'
[Error] MapObjSvr.pas(46): Types of actual and formal var parameters must be identical
请问这样该怎么解决?

回复 点赞
Sephil 2005年03月18日
没有的用Variant代替

你New ActiveX Control的时候可以将一个已有的VCL类转换成ActiveX Control的
回复 点赞
halfdream 2005年03月18日
1,基本类型如INTEGER还有原来的。
2,STRING改用WIDESTRING
3,CLASS改用INTERFACE抽象。


回复 点赞
jxauyhj 2005年03月18日
TMap 不能用Variant代替,会出错 ,TMap 是我自己安装的地图控件
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1465

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告