情况是这样的,我需要在程序中使用TNT Unicode控件。以前用的D7,TNT工作的很好。
昨天装了D2007。但是TNT最后一个免费版本并不直接支持D2007的安装,在TNT的安装文件中有个BDS4文件夹,安装D2007时安装程序自动创建的文件夹是 5.0 ,也就是说那个BDS4文件夹中的安装文件只比D2007低一个版本。我试着装了一下,成功了。但在D2007编译我用D7写的程序(程序中当然用了Tnt控件)时出现了如下错误:
[DCC Error] TntIniFiles.pas(988): E2003 Undeclared identifier: 'WStrLen'
[DCC Error] TntIniFiles.pas(1030): E2003 Undeclared identifier: 'WStrLen'
[DCC Error] frmSettingUnit.pas(9): F2063 Could not compile used unit 'TntIniFiles.pas'我查了一下,那个WStrLen 在 TntWideStrUtils.pas 文件中。而 出错的 TntIniFiles.pas 文件中已经在 uses 部分引用了 TntWideStrUtils.pas 。这是怎么回事?该怎么解决?
谢谢大家关注我的问题,给大伙拜个年了~~~PS: D2007的图标什么含义?怎么像个喇嘛头?那圈红色就像是喇嘛的帽子。

解决方案 »

  1.   

    喇嘛的帽子? 哈哈没有用过TNT组件,WStrLen在字面上理解应该是获得widestring lenth,你看看可不可以改写这个函数,大年30楼主还在研究技术,精神可嘉~~
    新年快乐!
      

  2.   

    昨晚看春晚了,今天上午又人来人往我家的,没上网。图标看这里,我上传到了临时图片空间上。
    http://www.picupine.com/0211696x
    那个函数是这样的
    {$IFNDEF COMPILER_9_UP}
    function WStrLen(Str: PWideChar): Cardinal;
    begin
      Result := WStrEnd(Str) - Str;
    end;function WStrEnd(Str: PWideChar): PWideChar;
    begin
      // returns a pointer to the end of a null terminated string
      Result := Str;
      While Result^ <> #0 do
        Inc(Result);
    end;
    {$ENDIF}WStrLen 调用了 WStrEnd。而这两个函数被那个预编译符号包裹着,是那个预编译捣的鬼?
    COMPILER_9_UP 是指的编译器版本吗?
    另写一个函数倒是可以,只是我最想弄明白为什么说未定义。PS: 技术不行啊。所以大年三十了还在折腾。
      

  3.   

    {$IFNDEF COMPILER_9_UP}
    如果没有定义compiler_9_up就编译程序。
    你试着把他去掉。我在delphi4项delphi7转时,也有好多不兼容,设置了好多{$IFDEF DELPHI_7}之类的预编译块。
      

  4.   

    谢谢两位朋友的回复。
    这几天有事,没能上网,不好意思。在TNT控件的目录下发现了 TntCompilers.inc 这个文件。里面有许多预编译符号,我再去试着弄一下,也许能解决。