Вы, вероятно, обнаружите утверждение в winocc.cpp в строке 345. Посмотрите на этот исходный файл, чтобы увидеть, что он проверяет (что не следует делать), а затем прекратите это делать :-)
Если у вас нет исходного кода, вам придется либо:
- свяжитесь с тем, кто написал это, и выясните, что это за утверждение; или
- прочитайте документацию по API, чтобы увидеть, что вы делаете что-то не так.
Утверждение - это время выполнения проверки того, используется ли кодер для обеспечения соблюдения правил или возникновения неожиданных ситуаций до того, как будет нанесен какой-либо реальный ущерб. Такие вещи, как двусвязный список, становятся поврежденными (например, что-то вроде assert (x-> next-> prev! = X), что создаст проблему, если предыдущий узел узла A не имеет узла A в качестве следующего узла).
Что-то вроде:
Assert (p1 == NULL);
(на моем мифическом языке, если у меня неправильный синтаксис C) в начале функции будет выдано утверждение, если p1 равно NULL.
Поиск в сети приводит к появлению следующей строки 345 (см. здесь ):
ASSERT (m_pCtrlSite! = NULL); // не элемент управления OLE (по крайней мере, пока).
и, похоже, проблема в том, что вы пытаетесь динамически создать лицензионный элемент управления ActiveX. Эта ссылка также содержит номер КБ Q151804, в котором говорится, что он разработан (что означает, что MS, вероятно, не исправит его) - вам нужно создать элемент управления с действующей строкой лицензии.
Еще один найденный мной комментарий гласит:
Недостаточно просто создать экземпляр элемента управления ActiveX. Элемент управления ActiveX должен быть правильно размещен, прежде чем его можно будет использовать. Твой нет. Вы должны, скажем, поместить его в диалог и создать экземпляр этого диалога.
Не видя остальной части вашего кода, трудно сказать, является ли это вашей конкретной проблемой, но если ваша строка 345 - это та, которая мне кажется, это имеет смысл - жаловаться, что контроль сайт имеет значение NULL (т. е. элемент управления не размещен).
И последнее, на что нужно обратить внимание:
Если ваш элемент управления ActiveX равен в диалоговом окне, вы пытаетесь что-то сделать с элементом управления до того, как вызовете диалоговое окно DoModal()
?
Элемент управления будет инициализирован только после того, как вы позвоните DoModal()
, поэтому вы не сможете играть с элементом управления до тех пор, пока это не произойдет. Вы должны сделать это в диалоговых окнах OnInitDialog()
- в этот момент элемент управления должен быть полностью инициализирован, и вы можете делать с ним все, что хотите.
Если вы пытаетесь использовать параметры из конструктора диалогов для управления элементом управления, вам необходимо сохранить их где-то в диалоговом окне 1054 * и передать их в элемент управления в OnInitDialog()
.
Эта информация была собрана в основном из здесь .