У меня возникла проблема с передачей указателя на функцию. Когда функция возвращает указатель, кажется, отличается от того, что находится в функции.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() успешно в основной функции()?
Определение для scanGetFrame() выглядит следующим образом:
typedef void *FTR_PVOID;
FTR_API_PREFIX FTR_BOOL FTR_API ftrScanGetFrame(FTRHANDLE ftrHandle, FTR_PVOID pBuffer, PFTRSCAN_FRAME_PARAMETERS pFrameParameters);
Функция scanGetFrame() происходит от 3-сторонней библиотеки, что я связывающей с, так что я не буду иметь возможность изменить определение ,
Как «сканироватьGetFrame» добавлять данные? – juanchopanza
Вы пробовали печатать переменные указателя в обоих случаях, прежде чем они передаются в 'writeJPEGBFile'? – Hrishi
Похоже, что 'scanGetFrame' - это макрос, который принимает адрес' pBuffer' или некоторых таких. В противном случае я не вижу, чтобы это работало. Не могли бы вы опубликовать определение 'scanGetFrame'? –