Я написал COM-объект, который, в свою очередь, использует элемент управления ActiveX сторонней организации. В моем FinalConstruct () для моего COM-объекта я создаю экземпляр элемента управления ActiveX с помощью следующего кода:
HRESULT hRes;
LPCLASSFACTORY2 pClassFactory;
hRes = CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
bool bTest = SUCCEEDED(hRes);
if (!bTest)
return E_FAIL;
if (SUCCEEDED(CoGetClassObject(__uuidof(SerialPortSniffer), CLSCTX_INPROC_SERVER, NULL,
IID_IClassFactory2, (LPVOID *)(&pClassFactory))))
{ ... more set up code
Когда я перехожу через строку if (SUCCEEDED (CoGetClassObject (__uuidof (SerialPortSniffer)), ...,
Я получаю более 20 строк в окне «Вывод» с указанием:
Исключение первого шанса в 0x0523f82e
в SillyComDriver.exe: 0xC0000005:
Место записи о нарушении прав доступа
0x00000000.
Я также получаю строки:
Исключение первого шанса в 0x051e3f3d
в SillyComDriver.exe: 0xC0000096:
Привелегированная инструкция. Во-первых, шанс
исключение в 0x100ab9e6 в
SillyComDriver.exe: 0xC000001D:
Нелегальная инструкция.
Обратите внимание, что это исключения первого шанса. Программа работает, как и ожидалось, я могу получить доступ к сторонним методам / свойствам. Тем не менее, мне остается удивляться, почему они происходят. Возможно, мой способ создания экземпляра элемента управления ActiveX (для которого я хочу использовать его методы / свойства, а не вещи GUI) неверен? Помимо кода, который я показываю, я также поставил строку
#import "spsax.dll" no_namespace
в stdafx.h
Вот и весь код, необходимый для моего простого демонстрационного проекта. Я заметил эту проблему, потому что я (непреднамеренно) установил параметры «разбить на исключения» в моем «реальном» проекте, и он ломался на этой линии. Как только я удалил это, это также работает.
Если вы прочитали это далеко, спасибо, и, возможно, я могу задать еще один незначительный вопрос. В моем демонстрационном проекте, если я щелкну правой кнопкой мыши на SerialPortSniffer и "перейду к определению", он перейдет в файл C: .... \ AppData \ Local \ Temp \ spsax.tlh Кто-нибудь может это объяснить? Наконец, в моем «реальном» проекте щелчок правой кнопкой мыши на SerialPortSniffer и переход к определению приводит к «Символу SerialPortSniffer не определен». Похоже, это не влияет на программу. Есть какие-то настройки, которые я испортил?
Кстати, весь мой код написан с VS2008.
Спасибо,
Dave