1 year ago

#388377

test-img

YehudaS

SWIG: C++ to python: how to wrap a function that passes a reference to a struct

How should I wrap (via SWIG) C++ functions that pass a pointer or a reference to a structure, to make them work in python? Here's an example:

typedef struct
{
    double  dTrCoef[16][3];
    int iNumAxes;
    int iBufferMode;
    int iMcsToAcsFuncID[16];
    unsigned long uiNode[16];
    int iType[16];
    unsigned char ucExecute;
}MMC_SETKINTRANSFORM_IN;

typedef struct
{
    unsigned short usStatus;
    short usErrorID;
}MMC_SETKINTRANSFORM_OUT;

 unsigned short g_usConnHndl = 0;
 unsigned short g_usAxisRef = 3;

int MMC_SetKinTransform(
        unsigned short hConn,
        unsigned short hAxisRef,
        MMC_SETKINTRANSFORM_IN* pInParam,
        MMC_SETKINTRANSFORM_OUT* pOutParam);
void SetKinTransform(MMC_SETKINTRANSFORM_IN& stInParam)
{
    MMC_SETKINTRANSFORM_OUT stOutParam;

    MMC_SetKinTransform(g_usConnHndl, g_usAxisRef, &stInParam, &stOutParam);
}

When running the following code in python (without making any special wrapper for SetKinTransform function in SWIG):

b = mmcpp_lib.MMC_SETKINTRANSFORM_IN
SetKinTransform(b)

I receive the following TypeError:

TypeError                                 Traceback (most recent call last)
In  [4]:
Line 1:     SetKinTransform(b)

File /usr/lib/python3.8/mmcpp_lib.py, in SetKinTransform:
Line 16987: return _mmcpp_lib.SetKinTransform(self, stInParam)

TypeError: in method 'SetKinTransform', argument 2 of type 'MMC_SETKINTRANSFORM_IN &'

Thanks

python

c++

swig

0 Answers

Your Answer

Accepted video resources