用vs2005做一个dll,其中一个函数的参数类型是LPWSTR,就是delphi中的PWideChar。但在调用的时候总是出错,我已经测试了,如果直接传入字符串,没有问题。代码如下:函数:func(lpArg: LPWSTR): DWORD; cdecl; external  'XXX.DLL';调用:var 
  lpSS: PWideChar;
  lsSS: string;
  len: integer;
begin
  lsSS := 'test';
  len := Length(lsSS) + 1;
  lpSS := AllocMem(len * SizeOf(WideChar));
  try
    StringToWideChar(lsSS, lpSS, len);
    func(lpSS);     //如果把lpSS改为'test'就没有问题
  finally
    FreeMem(lpSS);
  end;
end;
请教高手。谢谢

解决方案 »

  1.   

    PChar(lpSS)编译报错,类型不兼容:Char和WideChar
      

  2.   

    另外,PChar(lsSS)也报错,类型不兼容
      

  3.   

    if you just want to pass the parameter to func, use func(const v:WideString), otherwise use func (var v:WideString).
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      pw:PWideChar;
      ss:string;
      pc:PChar;
    begin
      pw:='ABCD';
      ss:=OleStrToString(pw);
      pc:=PChar(ss);
      ShowMessage(pc);
    end;
      

  5.   

    不好意思,上面搞错了,楼主试试把StringToWideChar(lsSS,   lpSS,   len);改成lpss:=StringToOleStr(lsss);看看
      

  6.   

    var  
      lpSS: PWideChar; 
      lsSS: string; 
      len: integer; ///////////////
    lpss定义成:
    lpss: array[0..255] of WideChar;
      

  7.   

    函数:func(lpArg: LPWSTR): DWORD; cdecl; external   'XXX.DLL '; 
    可能问题出在函数调用方式,cdecl-〉stdcall试试看。