В настоящее время я пытаюсь переписать старую программу, написанную с помощью C#, в ту же программу, но на Qt.
Я новичок в C ++ (полтора месяца) и имею нет наставника, чтобы спросить, поэтому я надеюсь, что кто-то из вас может помочь решить мою проблему,
Одна из функций в коде ссылается на внешний файл dll и использует две функции оттуда. И в большинстве случаев это дает мне ошибку нарушения прав доступа для чтения. (иногда работает)
Код выглядит так.
main. cpp
void DecodeImage(QByteArray inputData)
{
int imageSize = inputData.Length();
unsigned char* ptr = DecompressImage((unsigned char*)inputData.data(), &imageSize);
QByteArray result = QByteArray((char*)ptr, imageSize);
FreeMemory(ptr);
}
decopressor.h
#if _WINDLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
#if defined(__cplusplus)
extern "C"
{
#endif
EXPORT unsigned char* DecompressImage(unsigned char* input, int *length);
EXPORT void FreeMemory(unsigned char* pointer);
#if defined(__cplusplus)
}
#endif
А также у меня нет доступа к исходному коду dll.
Я думал, что мои входные данные неверны, поэтому я сравниваю все входные данные, которые входят в dll, с C# версии, оказывается, они все одинаковы.
Код ошибки такой, и программа выдает из библиотеки функцию DecompressImage .
test.exe: 0xC0000005: Место чтения нарушения прав доступа 0x0000000007CA4000.
Это также может быть моей небрежностью, поскольку я новичок в C ++ и Qt. Но я пытаюсь выяснить проблему на прошлой неделе, но все еще не могу ее исправить. В любом случае приветствуется любой ввод.
EDIT: забыл * at imageSize в результате.
EDIT 2: удалил экспорт PNG строка
EDIT 3: с использованием действительного адреса вместо объявления нового указателя