问题描述如下,下面是VC++的头文件的声明:
struct CIRCLE
{
POINT center;
int r;
};struct SXXItem
{
CIRCLE c;    
double confidence;  
SXXItem *pNext;
SXXItem(){ confidence = 1.0; pNext = NULL; }
};typedef vector<SXXItem> XXItems; extern "C" __declspec(dllimport) int DetectXX(unsigned char* pImage, int w, int h, int step, XXItems &XXs);我翻译的结果:
  TCircle = record
    Center: TPoint;
    r: Integer;
  end;  pTXXItem = ^TXXItem;  TXXItem = record
    Circle: TCircle;
    Confidence: Double;
    pNext: pTXXItem;
  end;  TSingleFaceItemArray = array of TFaceItem;function DetectFace(pImage: pByte; w, h, step: Integer; var Faces: TSingleFaceItemArray): Integer; cdecl; external 'FD_API.DLL';无法正常出结果,求解答。

解决方案 »

  1.   

    TSingleFaceItemArray = array of TFaceItem;function DetectFace(pImage: pByte; w, h, step: Integer; var Faces: TSingleFaceItemArray): Integer; cdecl; external 'FD_API.DLL';应该是
    TSingleXXItemArray = array of TXXItem;function DetectXX(pImage: pByte; w, h, step: Integer; var Faces: TSingleXXItemArray): Integer; cdecl; external 'FD_API.DLL';
      

  2.   

    肯定不行。vector<SXXItem>是STL类,即使是不同的C++编译,通过DLL方式这样传递也很可能不行,更不用说是DELPHI。
    必须先把这个vector转为一个静态数据结构,比如标准数组,或对其进行序列化。
      

  3.   

    TXX = record一般都是
    TXX = packed record
      

  4.   

    没办法啊,Raptor,这是别人的一个DLL,编译器是VC++肯定的,然后没有调用其他的STL库,是用的MS自带的那个simple的库。
      

  5.   

    用数组代替vector
    vector类似delphi的TList。C++ STL特有的
      

  6.   

    如果你确定别人是VC++编译的。你可以自己重新封装一下接口,在你的实现中实现数组<-->vector。然后你的delphi访问的是你自己封装的dll
      

  7.   

    也就是说确定不能用Delphi实现了咯?
      

  8.   

    也就是说确定不能用Delphi实现了咯?
    ----------------------------------
    起码不能够直接实现了,可以考虑lexchou的方法,再另外用VC做一个接口dll。