我在传递指向函数的指针时遇到了问题。当函数返回时,指针看起来与它在函数中的不同。C函数指针参数在函数退出时不一样
因此,我将一个指针传递给获取原始图像数据的函数,该数据应该存储在指针引用的内存中。
如果我然后将原始图像函数内的指针传递给函数以从原始数据创建JPEG文件,那么它可以正常工作。
如果我首先等待原始图像函数完成,然后使用传递给原始图像函数的指针调用JPEG函数,那么它将无法创建图像。
代码的简化版本低于:
int getRawImage(unsigned char *pBuffer);
int writeJPEGBFile(unsigned char *idata, char *ofile);
int main(int argc, char** argv) {
unsigned char *rawData = NULL;
char filename[MAXPATHLEN] = "/home/user/tst/img.jpg";
getRawImage(rawData);
// This does not work
writeJPEGBFile(rawData, filename);
free(rawData);
return 0;
}
int getRawImage(unsigned char *pBuffer) {
void *hDevice;
hDevice = scanOpenDevice();
// Removed code for simplification
scanGetFrame(hDevice, pBuffer, NULL)
scanCloseDevice(hDevice);
// This Works!!
//char filename[MAXPATHLEN] = "/home/user/tst/img.jpg";
//writeJPEGBFile(pBuffer, filename);
return 0;
}
int writeJPEGBFile(unsigned char *idata, char *ofile) {
// JPEG code goes here
return 0;
}
我的问题是什么我做错了,我怎么能顺利通过RAWDATA指针writeJPEGBFile()函数在main()函数?
的scanGetFrame(定义)如下:
typedef void *FTR_PVOID;
FTR_API_PREFIX FTR_BOOL FTR_API ftrScanGetFrame(FTRHANDLE ftrHandle, FTR_PVOID pBuffer, PFTRSCAN_FRAME_PARAMETERS pFrameParameters);
的scanGetFrame()函数来自于我与链接第三方库,所以我将无法更改定义。
'scanGetFrame'如何添加数据? – juanchopanza 2014-10-08 06:50:19
你有没有尝试过在两种情况下都将指针变量打印到'writeJPEGBFile'中? – Hrishi 2014-10-08 06:51:11
它看起来像'scanGetFrame'是一个宏,它需要'pBuffer'或某些类似的地址。否则,我不认为这个工作。你可以发布'scanGetFrame'的定义吗? – 2014-10-08 06:51:20