У меня есть устаревший элемент управления OCX, встроенный в VS2010 и используемый в VB6 ActiveX EXE. Когда я регистрирую отладочную версию OCX и пытаюсь собрать ее с VB6, я получаю сообщение об ошибке
Если я регистрирую версию Release, то контейнер VB ActiveX EXE компилируется и запускается. Я сделал онлайн-поиск этой ошибки, но результаты не очень информативны. Не совсем понятно, означает ли ошибка, что она вообще не может найти тип OCX, или если в интерфейсе OCX есть тип, который VB не поддерживает. Ошибка указывает на первую попытку использования объекта OCX в исходном коде VB.
170 m_SignCaptureForm.SigPlus1.TabletComTest = False
Где SigPlus1 — это объект OCX. Глядя на TypeInfo из OLE / COM Object Viewer единственные различия, которые я вижу между Debug и Release, заключаются в том, что все возвращаемые типы BOOL определены как голец в версии Debug и как VARIANT_BOOL в версии выпуска.
======== OLE / COM Object Viewer TypeInfo для отладки ========
char TabletLCDMode;
[id(0x00000010)
]
========= OLE / COM Object Viewer TypeInfo для выпуска ========
VARIANT_BOOL TabletLCDMode;
[id(0x00000010)
]
В исходном коде OCX нет ничего, что могло бы повлиять на то, что эти объявления будут другими в Debug vs Release. Я спрашиваю, почему я получаю эту ошибку, и если причина в разнице в типах BOOL, что для этого нужно?
ocx.h: afx_msg BOOL GetTabletLCDMode();
ocx.cpp: DISP_PROPERTY_EX(CSigPlusCtrl, "TabletLCDMode", GetTabletLCDMode, SetTabletLCDMode, VT_BOOL)
После @A. Предложение изучить параметры свойства для файла ODL проектов OCX (SigPlus.odl) я нашел решение.
Были различия в настройках Release и Debug при просмотре свойства для файла SigPlus.odl. Чтобы получить доступ к свойствам ODL, щелкните правой кнопкой мыши файл .ODL в исходных файлах в обозревателе решений. Параметр, который заставлял сборку Debug объявлять bools, поскольку char был MkTypeLib Совместимость вариант. Для отладочной сборки было установлено значение «Нет», а для версии «Релиз» — «Да». Как только я изменил отладочную сборку на Совместимо с MkTypeLib: Да затем TypeInfo из OLE / COM Object Viewer показал bools как VARIANT_BOOL точно так же, как сборка Release, и контейнер VB ActiveX EXE теперь успешно собирается.
Других решений пока нет …