请教一个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中没有的数据类型
...全文
111 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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 是我自己安装的地图控件

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧