首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • fastreport不能打印,生成动态链接库DLL,不能打印,提示找不到对应字段 [已结贴,结贴人:hewei001]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hewei001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-08 14:40:53 楼主
    在fastreport打印中,当我没有生成DLL时打印完全没有任何问题,当生成DLL后链接到主程序上,结果打印时就会报错:
    Cannot assign to a TFilelist to a Tstringlist..
    110  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • starao
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 14:48:561楼 得分:0
    类型不匹配 查一下字段的属性吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hewei001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 15:06:182楼 得分:0
      是在Dll中打印报表出现这样的错误是什么原因 
      Cannot assign to a TFilelist to a Tstringlist
      点击确定后,就会出现找不到字段错误.........
      delphi  7.0  +  fastreport
      同样的代码.exe不会出错,在动态链接库就会出错 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jjwwang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-09-15 20:53:273楼 得分:0
    写什么代码或脚本了?
    另外,报表有什么特别是的地方吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • heweihappy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-19 13:45:264楼 得分:110
    fastreport
    中有问题,改下源码就OK

    在dll中使用FastReport会遇到以下内个问题:
    1.调用时变量出错,最普通的一个变量注入也是一样
    2.出现Cannot assign a TFieldList to a TStringList的错误
    3.Invalid pointer operation的错误,在函数中返回WideString引起的

    以下是解决办法:

    1.不要在DLL中直接引用FastReport的单元文件,最好用一个接口类来实现 ,做法如下:
      a.定义公共类接口
      b.在主程序中实现该接口类
      c.把接口类的实例指针传给DLL
      d.在dll中调用公共类的方法,以实现注入变量与数据集的功能
    2.修改frxDBSet.pas中的procedure TfrxDBDataset.GetFieldList(List: TStrings);
    var
      i: Integer;
    begin
      List.Clear;
      if FieldAliases.Count = 0 then
      begin
        try
          if FDS <> nil then
            for i := 0 to FDS.FieldCount - 1 do    // <--新加的
              List.Add(FDS.Fields[i].FullName);    // <--新加的
            //FDS.GetFieldNames(List);            // <--旧的函数
        except
        end;
      end
      else
      begin
        for i := 0 to FieldAliases.Count - 1 do
          if Pos('-', FieldAliases.Names[i]) <> 1 then
            List.Add(FieldAliases.Values[FieldAliases.Names[i]]);
      end;
    end;

    3.非常重要的一点,要在主程序和DLL中都引用ShareMem单元文件,否则在获取数据集显示的字符串时将出现错误!高手跟踪一下就知道了
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved