需要使用从c dll里传来的数组,函数声明中返回的是PPChar,我必须要知道PPChar的长度,才可以获取其中的内容,但是该如何做呢?我试了一下,直接inc似乎是不正确的.
function getSize(arr : PPChar) : Integer;
var 
i: Integer;
begin
while arr^ <> NIL then
begin
inc(i);
inc(arr);
end;
result := i;
end;

解决方案 »

  1.   


    function getSize(arr : PPChar) : Integer;
    var 
    p: PChar;
    begin
    Result := 0;
    p := PChar(arr^);
    while p^ <> #0 then
    begin
    inc(Result);
    inc(p);
    end;
    end;
      

  2.   


    var
      P: PChar;
      Pp: PPChar;
      I: Integer;
    begin
      P := 'DElPHI';
      Pp := @P;  ShowMessage('长度:' + IntToStr(StrLen(pp^)));
      for I := 1 to StrLen(pp^)  do
      begin
        ShowMessage(PP^^);   // 取单个字符
        Inc(PP^);
      end;
    end
      

  3.   

    arr : PPChar 指针的指针
    arr^^ 要解除指针引用俩次才会取到单个字符 
      

  4.   

    看来是我说的太不清楚了c dll里会传回一个指向字符数组的指针 指向 {"aa", ""bb", "cc"}  这样的内容,我要知道这个数组有多长,才能把这些值都取回来
    p1 = pp^;
    inc(pp);
    p2 = pp^;
    inc(pp);
    ...但是这个长度不知道如何得到,在delphi里二级指针似乎不能像pchar指针那样方便地检查结束位置
      

  5.   

    这是我写的测试代码,里面还有另外一些奇怪的问题
    function ppcharTest() : Integer;
    var
    char1, char2: pchar;
    charP :^pchar;
    charP2 : ^pchar;
    i : Integer;
    begin
    i:=0;char1 := 'first';
    char2 := 'second';charP := @char1; 
    charP2 := charP; // charP2应该是一个指向array of char的指针,也就是一个ppchar吧inc(charP);
    charP := @char2;// dec(charP);  //这个时候,我理解charP^应该等于char1,但是在我这里显示乱码, 不知道为什么dec和inc的行为不是可逆的// 我理解这样应该能够求出ppchar的长度
    while charP2 <> NIL then
    begin
    inc(i);
    inc(charP2);
    end;show(i);  // 在这里i总是16,不知道为什么
    end;
      

  6.   

    inc(charP2);
    你加个干什么?  最外层的指针的值 你根本不需要去改的, 你要改的只是 charp2^ pchar 指针的值 
      

  7.   

    你试下 
    sizeof(arr^) div Sizeof(arr^[0])
    #include <iostream>
    using namespace std;int main()
    {
       char* a[3] = {"abc", "cds", "sds"};
       char*(*a1)[3] = &a;   cout<<sizeof(*a1) / sizeof(*a1[0])<<endl;
        
        return 0;
    }
    他给你传的是不是a1?
      

  8.   

    编译肯定通过的啊charP2原先指向charP最初初始化的位置,也就是char1,我是按c理解的,charP2指向一个包含两个指针的数组,{ p1 -> char1, p2 -> char2 }inc(charP2)使charP2的当前指针指向p2,也就是指向char2;照我的理解,再inc,charP2就该指向nil了,然后while就结束了
      

  9.   

    charP2 := charP; 
    while charP2 <> NIL then
    这样的语句编译器也认? 
      

  10.   

    sizeof(arr^) div Sizeof(arr^[0])
    这样有没取到长度? 
      

  11.   

    why不认,有问题吗,语法上,
    sizeof(arr^) div Sizeof(arr^[0])可以取到长度,但是不对阿