实际工作中,会碰到go调用c语言动态库,涉及到数组的赋值时,出现了问题,例如,c里面定义了如下结构:
typedef struct ANA_PROCESS_FRAME_
{
ANA_PROCESS_FRAMETYPE nType;
ANA_VIDEO_FRAME stVideoFrame;
ANA_AUDIO_FRAME stAudioFrame;
unsigned char byRes[128];
}ANA_PROCESS_FRAME;
在go语言中,如果用以下方式对ANA_PROCESS_FRAME里面的byRes赋值,则会出现编译不过的情况。
pInputFrame := new(C.ANA_PROCESS_FRAME);
C.strcpy(pInputFrame.byRes, C.CString("/home/wyg/GaitAnalyizeTool/AlgorithmAnaGait/fanmian1.mp4"))
这着实让人费解,好在找到了下面这样一种方式进行赋值,如下所示:
mystr := "/home/wyg/GaitAnalyizeTool/AlgorithmAnaGait/fanmian1.mp4"
arr := [128]C.uchar{}
for i:= 0; i < len(mystr) && i < 128; i++{
arr[i] = C.uchar(mystr[i])
}
pInputFrame := new(C.ANA_PROCESS_FRAME);
pInputFrame.byRes = arr;
这样就可以了。