调用一个C++写的Com组件,用delphi2010把这个com导入进来,自动包装成了控件安装了。然后调用Com的一个方法,这个方法要传一个PWideChar类型的参数。比如com的方法是这样:function addfile(pFilename:PWideChar):integer;  ->这个是delphi自动包装生成的,我不是自己写的
我试了好几种方法调用com的addfile方法: 第一种:
addfile('tt1.txt');
第二种:
addfile(PWideChar('tt1.txt'));
第三种:
addfile(PChar('tt1.txt'));然后经过检测,com收到的只有一个"t",就是传过来的pFilename只收到了第一个字符,这是为啥?p.s:调用这个com,有个c++写的例子,里面是这么写的 addfile((LPSTR)filename)。

解决方案 »

  1.   

    C/C++   Delphi
    LPSTR - PChar
      

  2.   

    delphi2010里面PChar不就是PWideChar么?我第三种方法就是强制转成PChar,传过去还是只有一个字符~~~~
      

  3.   


    是 pAnsichar 把?
      

  4.   

    你传递的是一个指针,只是指向第一位的,你将长度也同时传递过去试试。var
      prr:Array of WideChar;
      prrLen:Integer;
      S:WideString;
    begin
      S:='你好我好大家好';
      prrLen:=Length(S);
      SetLength(prr,prrLen);  CopyMemory(@prr[0],@S[1],prrLen*2);  ShowMessage(PWideChar(prr));
    end;
      

  5.   

    先把文件名赋给一个  WideChar,再转换。常量也可以强制转换?
      

  6.   

    解决了。delphi的import功能,给com自动生成TLB的时候,这个函数里面的参数,自动填写的是PChar类型的!把它换成PAnsiChar就可以了。我真是吐血啊~~~