У меня странная ситуация. Я пытаюсь внедрить SDK устройства камеры PCI более 10 лет назад в свое программное обеспечение для управления камерой. Производитель больше не работает, и у меня нет возможности получить официальную помощь. Вот и я, ищу помощи в моей уродливой проблеме.
SDK поставляется с примерами Visual Studio 6.0
. Один из включаемых файлов имеет структуру, заканчивающуюся массивом из одного байта, как показано ниже;
typedef struct AVData {
...
BYTE audioVideoData[1];
}AVDATA, *PAVDATA;
Но этот однобайтовый выделенный массив байтов получает видеокадры и, как ни странно, он отлично работает с версией Visual Studio 6.0. Если я попробую это с Visual Studio 2005/2008/2010, я начну получать сообщения об ошибках Memory Access Violation
, что на самом деле имеет смысл, поскольку после этого не должно быть возможности выделить пространство для массива фиксированного размера, не так ли? Но тот же код отлично работает с VS 6.0?! Вероятно, это вызвано различиями во времени выполнения компилятора или С++, но я не очень разбираюсь в этом вопросе, поэтому мне трудно сказать точную причину.
Я попытался изменить размер на ожидаемое максимальное количество байтов, как показано ниже;
typedef struct AVData {
...
BYTE audioVideoData[20000];
}AVDATA, *PAVDATA;
Это помогло ему начать работать, но время от времени я получаю проблемы с нарушением доступа к памяти при попытке уничтожить объект декодера библиотеки.
С этим определенно что-то не так. У меня нет исходных кодов SDK, только файлы DLL, Lib и Header.Мои вопросы:
1) Действительно ли законно выделять пространство для массива фиксированного размера в версии Visual Studio 6.0?
2) Есть ли какой-либо возможный способ (опция компилятора и т. д.), чтобы тот же код работал с более новыми версиями VS/средами выполнения C++?
3) Поскольку мой обходной путь редактирования файла заголовка работает до определенного момента, но все еще имеет проблемы, вы знаете какой-нибудь лучший способ обойти эту проблему?