把下面c++的代码给转成delphi VARIANT FaceImgData,UserData;
int ret;m_irface1.GetSelectData(&FaceImgData, &UserData, &ret);BYTE* faceImage = new BYTE[m_irface1.GetUserImageSize()];
faceImage=FaceImgData.pbVal;

解决方案 »

  1.   

    var
      FaceImgData,UserData: OleVariant;
      ret: Integer;
      faceImage: array of Byte;
    begin
      m_irface1.GetSelectData(@FaceImgData, @UserData, @ret);  SetLength(faceImage,m_irface1.GetUserImageSize());
      Move(TVarData(FaceImgData).VPointer^,faceImage[0], Length(faceImage )); 
    end;
      

  2.   

    其实C++里面这段代码当中是有问题的。BYTE* faceImage = new BYTE[m_irface1.GetUserImageSize()];
    faceImage=FaceImgData.pbVal;这里第二行只是把指针faceImage指向了另外一个地址,事实上会导致上面一行代码当中分配的内存缺失管理,而造成内存丢失,即程序运行多次之后会发现占用内存暴涨。
      

  3.   

    僵哥在吗?
     m_irface1.GetSelectData(@FaceImgData, @UserData, @ret);这一句有问题呀。delphi中认出这个函数的参数是 olevariant,现在加一个取地址的报[Error] Unit1.pas(111): Types of actual and formal var parameters must be identical,
      

  4.   

    是不是这个GetSelectData的定义加了var,如果是把m_irface1.GetSelectData(@FaceImgData, @UserData, @ret)改成m_irface1.GetSelectData(FaceImgData, UserData, ret),DELPHI传指针和C稍微有这点区别。
      

  5.   

    如果声明里面已经有var关键字,则不需要再用@取地址了,直接变变量。