dll工程那一大段注释说的也很明白了
如果非要使用string类型,则需要在dll工程和调用该dll的工程中都最先引用 shareMem单元.但是我不想使用string,所以使用了pchar来代替
我的一个dll中有关于对数据库操作的一个函数,参数是pchar类型:function GetSysUser(AuserID,Apassword:pchar):olevariant;overload;返回的是一个满足查询结果的数据集function TsysUserLib.GetSysUser(AuserID,Apassword:pchar):olevariant;
begin
  with sysuserDM do
  try
  if not ADOConnection1.Connected then
           ADOConnection1.Connected:=true; //连接
  with adoqsysUser do
  begin
          close;
          sql.clear;
          sql.add('select * from sys_user where userID=:tmpUserID and userPwd=:tmpUserPwd');
          parameters.ParamByName('tmpUserID').Value:=AuserID;  //问题在这里,提示variant和pchar不匹配
          parameters.ParamByName('tmpUserPwd').Value:=Apassword; //问题在这里,提示variant和pchar不匹配
          open;
          result:=Dsp_sysuser.data;
  end;
  finally
      ADOConnection1.Connected:=false; //关闭连接
  end;   
end;
上面的 parameters.ParamByName('tmpUserID').Value 类型是variant的,但我的参数是pchar的。所以提示不匹配..我想知道如何解决这样的问题? 难道非要设定参数也为variant类型的才能解决问题吗??

解决方案 »

  1.   


    parameters.ParamByName('tmpUserID').Value:=StrPas(AuserID)
      

  2.   


    在過程的開始請加上: CoInitialize(nil); 過程處理完帶上:CoUninitialize;    string(AuserID) , 這樣也行, strPas  處理也可以。          parameters.ParamByName('tmpUserID').Value:= strPas(AuserID);  //问题在这里,提示variant和pchar不匹配
              parameters.ParamByName('tmpUserPwd').Value:= strPas(Apassword); //问题在这里,提示variant和pchar不匹配
      

  3.   

    PChar是一个指针而已string强制转换就行了
      

  4.   

    parameters.ParamByName('tmpUserID').AsString := StrPas(AuserID);