定义:
function FormatXMLParam(lpszMsgID, lpszResValueType:String; var sXMLFormat:String; lpszErrorMsg:String):Boolean;调用:
var
     sXML :String;
    FormatXMLParam('ID_APP_PDM_ISSTART', 'out',  sXML, '');出错信息:
types of actual and formal var parameters must be identical;为什么我参数类型都一致还提示我错误,而且当我把var sXMLFormat:String这个参数改成Integer类型后就没有错误了,难道String这种类型不能传地址吗,如果是这样要怎么实现String类型的引用传值?

解决方案 »

  1.   

    相同代码测试没有发现问题。
    检查sXML 的定义有没有错误,或者在不同地方定义了这个变量。
      

  2.   

    错误:声明为var   类型的参数必须和填入的值类型相同 
    看一下sXML是怎么定义的,不能定义为常量
      

  3.   

    定义和调用是放在两个.pas文件里的,当然调用的地方用uses把定义和实现的文件包含进来了
    刚试了把定义和调用放在同一个.pas内发现可以编译通过,但在另外一个文件里调用就是出现类型不一致的提示,
    参数类型已检查多遍,没有问题,也没有重复定义相同名称的变量,请问有没有人遇到过这种情况?
      

  4.   

    sXML的定义上面已经写了啊,String类型
    但没有初始化,直接用了,我试了先sXML := '';再调用函数还是编译不通过
      

  5.   

    你在你的代码中搜一下 sXML变量。
    我这里试了,没有问题的
      

  6.   

    应该没有问题的
    改变量试试
    var 
         sXML_Test :String; 
        FormatXMLParam('ID_APP_PDM_ISSTART', 'out',  sXML_Test, ''); 
      

  7.   

    改变量也试过了
    定义和调用是放在两个.pas文件里的,当然调用的地方用uses把定义和实现的文件包含进来了 
    刚试了把定义和调用放在同一个.pas内发现可以编译通过,但在另外一个文件里调用就是出现类型不一致的提示, 
    参数类型已检查多遍,没有问题,也没有重复定义相同名称的变量
      

  8.   

    function FormatXMLParam(lpszMsgID, lpszResValueType:String; var sXMLFormat:AnsiString; lpszErrorMsg:String):Boolean; 调用
    var   
         sXML_Test :AnsiString
        FormatXMLParam('ID_APP_PDM_ISSTART', 'out',  sXML_Test, '');   
      

  9.   

    谢谢大家的帮忙,用blazingfire的方法编译通过了,只是不明白为什么这样,还有String和AnsiString有什么区别
      

  10.   

    String是通过编译条件来选择具体是AnsiString还是ShortString
    当然默认是AnsiString