比如用VC写了一个动态库,dephi 调用库里的一个函数, 并在调用函数的时候传入参数。  如果参数是 int 或 string  , VC的动态库函数是可以认识的,   但如果传递的是一个 结构或动态的数组,链表 , 是否可以正确的传递和接收呢。
  如果可以,DEPHI 里是用record 还是 TList , 还是^ 指针, 同时相对应的在VC里应该用什么去接收这个数据类型呢。
   现在项目里需要用到传递一个动态的结构数组下去, 不知道能不能正确传递,以及具体怎么做,特向大家请教,谢谢。

解决方案 »

  1.   

    是用TLIST吗, 是不是先准备好TList 后, 再用指针来传递//例子
    typeTData=Record //你的数据类型
     a:integer;
    end;PData=^TData;var
     alist:TList;
     p:PData;
    begin
      aList:=TList.create;
      new(p);
      p->a:=12;
      aList.Add(p);
    end;
      

  2.   

    #pragma pack(1)在C++里使用这个编译指令可以使结构体为无间歇对齐~~
    和在pascal里加上packed标识效果一样~~string是pascal里特有的~~
    不能作为共享数据类型~~//Delphi
    type
      TMyRecord = packed record
        rInt: Integer;
        rStr: array[0..19] of Char;
      end;//C++
    #pragma pack(1)
    struct TMyRecord
    {
      int rInt;
      char rStr[20];
    }
      

  3.   

    谢谢指教,zswangII(伴水清清)(一贴不灌,何以灌天下?) 那PASCAL 和C++ 之间能传递指针吗, 如
    type
      PMyRecord = ^MyRecord;
      MyRecord = record
               ID : integer;
               Name:string;
               ParentID : integer;
      PNext: PYourStr;
    end;
    相应的这个结构
      

  4.   

    谢谢指教,zswangII(伴水清清)(一贴不灌,何以灌天下?) 那PASCAL 和C++ 之间能传递指针吗, 是一个结构链表,如下所示
    type
      PMyRecord = ^MyRecord;
      MyRecord = packed record
               ID : integer;
               Name:array[1..20] of char;
               PNext: PMyRecord;
    end;相应的这个结构在C++里应该用什么结构来接收啊,是否可以用以下这个结构struct TmyRecord
    {
      int id;
      name char[20];
      TmyRecord * pNext;
    }
      

  5.   

    type
      PMyRecord = ^MyRecord;
      MyRecord = packed record
               ID : integer;
               Name:array[0..19] of char; //<<下标从0开始
               PNext: PMyRecord;
    end;struct TmyRecord
    {
      int id;
      name char[20];
      TmyRecord * pNext;
    }可以不可以你自己做做测试不就知道了~~