起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: xxb

【搞定】X3下导入Dll运行时错误[请求][请求]

[复制链接]
 楼主| 发表于 2007-5-23 13:42:41 | 显示全部楼层
已经发送请收取,请尽快回应。
回复 支持 反对

使用道具 举报

发表于 2007-5-23 13:43:38 | 显示全部楼层
已经收到,正在看,有结果马上跟贴高知
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 13:55:06 | 显示全部楼层
先试一下,不能用尽快发帖,不行的话,请给一个ftp,我把全部的资料放上去,
真是辛苦你了!
回复 支持 反对

使用道具 举报

发表于 2007-5-23 14:04:09 | 显示全部楼层
function TLayers.CreateLayer(const Name: WideString): CMapXLayer;
begin
  Result := DefaultInterface.CreateLayer(Name, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

function TLayers.CreateLayer(const Name: WideString; FileSpec: OleVariant): CMapXLayer;
begin
  Result := DefaultInterface.CreateLayer(Name, FileSpec, EmptyParam, EmptyParam, EmptyParam);
end;

function TLayers.CreateLayer(const Name: WideString; FileSpec: OleVariant; Position: OleVariant): CMapXLayer;
begin
  Result := DefaultInterface.CreateLayer(Name, FileSpec, Position, EmptyParam, EmptyParam);
end;

function TLayers.CreateLayer(const Name: WideString; FileSpec: OleVariant; Position: OleVariant;
                             KeyLength: OleVariant): CMapXLayer;
begin
  Result := DefaultInterface.CreateLayer(Name, FileSpec, Position, KeyLength, EmptyParam);
end;

function TLayers.CreateLayer(const Name: WideString; FileSpec: OleVariant; Position: OleVariant;
                             KeyLength: OleVariant; CoordSys: OleVariant): CMapXLayer;
begin
  Result := DefaultInterface.CreateLayer(Name, FileSpec, Position, KeyLength, CoordSys);
end;

这是Delphi中生成的代码,你可以看到CreateLayer有多种实现,如果需要
     m_Layer := EyeMap.Layers.CreateLayer('NavLayer',EmptyParam,EmptyParam,EmptyParam,EmptyParam);
改成这样的写法是一样的
     m_Layer := EyeMap.Layers.CreateLayer('NavLayer');

所以平台上也是写成
         m_Layer := EyeMap.Layers.CreateLayer('NavLayer');
就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 14:09:29 | 显示全部楼层
这个多态函数我试了不行的
[错误]Biz:\PRCDPZHYWGLJJCPJXXXT\ZHCX\DTCX.FUNC.DIR\MainForm.Form.pas(116, 34): Not enough actual parameters
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 14:10:47 | 显示全部楼层
我就感觉有点怪
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 14:30:20 | 显示全部楼层
这个东西我觉得有点非长常规的,我用了好些方法,与数据类型调试过了,不行,我想是不是导入的时候出了些什么运行时才能发现的问题啊
回复 支持 反对

使用道具 举报

发表于 2007-5-23 15:32:20 | 显示全部楼层
tmap的layers的类型是CMapXLayers,不是TLayers
你可以自己在Tmap中包装一个方法,然后在这个方法中调用
Layers.CreateLayer(Name, EmptyParam, EmptyParam, EmptyParam, EmptyParam);

在平台上直接调用这个方法就可以

  TMap = class(TOleControl)

    property Layers: CMapXLayers read Get_Layers;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 15:42:55 | 显示全部楼层
你是说在源文件中写个方法,然后在导入到平台,然后调用这个方法
那别外的那个问题怎么解决呢?
回复 支持 反对

使用道具 举报

发表于 2007-5-23 15:50:13 | 显示全部楼层
请参考
http://bbs.justep.com/forum.php? ... amp;highlight=class  16楼

class function CoSdeWorkspaceFactory.Create: IUnknown;
begin
  Result := CreateComObject(CLASS_SdeWorkspaceFactory) as IUnknown;
end;
平台上不支持class方法,只支持static的方法,所以请你把这个函数的语句直接写到平台上,不要调用这个函数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-11 09:54 , Processed in 0.039191 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表