2015-11-04 48 views
2

的等价物我正在通过桥接标头后面的SwiftArchitect's example从Swift调用C++函数。对于C++函数签名是这样的:从Swift调用C++ - 什么是std :: vector <T>

long GrabberInitializeAndProcess(
    unsigned char* pbInPixels, 
    int inStride, 
    unsigned char* pbOutPixels, 
    int outStride, 
    int width, 
    int height, 
    Point mqTopLeft, 
    Size mqSize, 
    std::vector<PolylineElement> * pForegroundMarks, 
    std::vector<PolylineElement> * pBackgroundMarks, 
    void* pGrabberState); 

(注:PointSize,并且PolylineElement是本地C++结构。)我在我的Objective-C++包装使用std::vector<T>什么签名?

+1

'NSArray *',你的包装将负责为了弥合这两种类型。 – Joe

+0

我在包装PolylineElement时遇到了问题(这是一个四个整数的简单结构),但我将其作为一个单独的问题来处理。你想添加你的评论作为答案,我会把它标记为这样吗? – dumbledad

回答

1

您正在使用vector作为指针。当你需要在Swift中使用它时非常好。

您可以使用void*代替:

long GrabberInitializeAndProcess(
    unsigned char* pbInPixels, 
    int inStride, 
    unsigned char* pbOutPixels, 
    int outStride, 
    int width, 
    int height, 
    Point mqTopLeft, 
    Size mqSize, 
    void * pForegroundMarks, 
    void * pBackgroundMarks, 
    void* pGrabberState); 

而且在实施执行类型转换。

或者,如果你需要的类型安全,你可以白:

typedef struct _vectorOfPolylineElement *vectorOfPolylineElementPtr; 

long GrabberInitializeAndProcess(
    unsigned char* pbInPixels, 
    int inStride, 
    unsigned char* pbOutPixels, 
    int outStride, 
    int width, 
    int height, 
    Point mqTopLeft, 
    Size mqSize, 
    vectorOfPolylineElementPtr pForegroundMarks, 
    vectorOfPolylineElementPtr pBackgroundMarks, 
    void* pGrabberState); 

而且在执行:

typedef struct _vectorOfPolylineElement 
{ 
    std::vector<PolylineElement> val; 
} *vectorOfPolylineElementPtr; 

如果你其实并不需要GrabberInitializeAndProcess载体,只是它的元素,你可以使用内存:

long GrabberInitializeAndProcess(
    unsigned char* pbInPixels, 
    int inStride, 
    unsigned char* pbOutPixels, 
    int outStride, 
    int width, 
    int height, 
    Point mqTopLeft, 
    Size mqSize, 
    PolylineElement * pForegroundMarks, 
    size_t foregroundMarksCount, 
    PolylineElement * pBackgroundMarks, 
    size_t backgroundMarksCount, 
    void* pGrabberState); 
相关问题