需要用delphi调用vc写的dll中的一个函数,需要传递1个参数,该参数是WideString类型。
例如
SetPram(const prm:WideString);
如果在Delphi中传递空字符串SetPram('');就报错,说无效参数,空字符串中加个空格就没事,但是我的程序必须要传递一个空字符串,不能是空格,需要怎么做。我想应该是string类型的空字符串'',转成WideString不认造成的。

解决方案 »

  1.   

    var s: Widestring = '';
    setparam(s);可行否?
      

  2.   

    我这么试了也不行。好像Widestring的参数就是不认'';
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      S:WideString;
    begin
      S:=StringOfChar(' ',1);
      ShowMessage(S);
    end;
      

  4.   

    vc写的dll中的参数是什么类型呢,这类型不能想用什么就用什么啊
      

  5.   

    也不行,用PWideChar('')编译报错,用PWideChar(' ')程序结果不对,程序就需要传递一个空字符串'',不能传空格
      

  6.   

    VC的参数类型是widestring,只要给它传递'' 就报错说是无效参数,DLL是无法改的,因为这是一个别人写好的COM程序
      

  7.   


    不行?你測試了沒SHOW出來看一下procedure TForm1.Button1Click(Sender: TObject);
    var
      s:WideString;
    begin
      s:=StringOfChar(' ',1);
      ShowMessage(s);
      Edit1.Text:=s+'sss';
    end;
      

  8.   

    這個肯定不行,以widestring返回是一個空值,不是空格
      

  9.   

    试了,确实不行,程序的源代码是:
    UserAuthObj.StartApp('',8);//  改成
    procedure TSAPIUserAuthObj.StartApp(const bstrPwd: WideString; nThdCount: SYSINT);//类方法原型:
    begin
      DefaultInterface.StartApp(bstrPwd, nThdCount);//这一步调用出错,bstrPwd仍然为WideString类型
    end;
      

  10.   

    別急,先不要往自己的程序裡套,先把以下語句show出來看下結果?(主要看下edit1的text中顯示的sss前有沒有一個空格字符),這時再檢查你VC寫的DLL的這個widestring參數〈最好跟蹤一下代碼,必要時show出來看下結果〉單步看結果procedure TForm1.Button1Click(Sender: TObject);
    var
      s:WideString;
    begin
      s:=StringOfChar(' ',1);
      ShowMessage(s);
      Edit1.Text:=s+'sss';
    end;
      

  11.   

    這樣?procedure TForm1.Button1Click(Sender: TObject);
    var
      a:Widestring;
    begin
      a:=VarToStrDef(a,'');
      ShowMessage(a);
      Edit1.Text:=a+'sss';
    end;
      

  12.   

    可否?procedure TForm1.Button1Click(Sender: TObject);
    var
      a:Widestring;
    begin
      begin
        a:='s';
        ShowMessage(StringReplace(a,'s','',[]));
        Edit1.Text:=a+'s';
      end;
    end;
      

  13.   


    vc的源码我也不知道,我只是掉用vc写的com程序dll文件,dll在delphi中自动形成一个类文件,有很多接口,源码太乱不好懂。我只知道同样传参数,用vb写就没问题
    UserAuthObj.StartApp "", 8//这是vb的代码就可以执行UserAuthObj.StartApp('',8)这是delphi的代码就报错,说参数无效,错误原因就是'' 和""不同。
    快烦死了。
      

  14.   

    var
      s:string;
    begin
      s := '';
      SetPram(StringToOleStr(s));
    end;
      

  15.   

    试了也不行,问题就是delphi传的参数是给对象的一个属性,该对象是vc写的,属性需要赋空值,用delphi传进去的值就报错,说无效参数
      

  16.   

    空是 nil你也可以将string直接赋值给widestring,然后再传进去。
      

  17.   

    引入函数,可能需要定义成
    procedure SetPram(const prm:PWideChar);stdcall;external xx.dll;
      

  18.   

    以上答案都不正确!终于找到了正确的方法
    SetPram(#0);
    #0代表空字符,可以成功传递并使VC正确相应。分不多,参与者尽量给分!谢谢各位了