2012-06-28 2 views
2

Итак, я играю с ActiveX и C# и способами, как обе они могут работать вместе. Дело в том, что я ударил стену в начале с указанной ошибкой. Шаги, которые я выполнил:Катастрофический сбой (исключение из HRESULT: 0x8000FFFF (E_UNEXPECTED)): приложение консоли ActiveX и C#

В VS2010 я выбрал проект MFC ActiveX Control. Затем я добавил метод «SHORT Multiply» (SHORT a, SHORT b); нажав кнопку «Добавить метод» в появившемся меню, когда вы щелкните правой кнопкой мыши _DProjectname в ProjectnameLib в браузере решений. Код для метода заключается в следующем:

SHORT CSampleProgramActivex01Ctrl::Multiply(SHORT a, SHORT b) 
    { 
     AFX_MANAGE_STATE(AfxGetStaticModuleState()); 

    // TODO: Add your dispatch handler code here 

    return (a * b); 
    } 

Теперь я создал простое C# консольное приложение, которое ссылается на сгенерированный COM-файл, и когда я пытаюсь использовать метод, приложение останавливается с указанной выше ошибкой. Я искал ошибку в Интернете, но ясное решение не упоминается. Любая помощь оценивается. Если вы, ребята, хотите уточнения, дайте мне знать.

+0

@HansPassant: Есть ли у вас какие-либо идеи, почему я получаю эту ошибку? Я пробовал все разные типы визуальной студии от VS6 до VS2010, но каждый раз, когда я получаю ту же ошибку. У вас есть простой учебник, который создает файл .ocx с помощью мастера MFC ActiveX. Я спрашиваю об этом, потому что поставщик создал .ocx через мастер MFC ActiveX, и я столкнулся с некоторой другой ошибкой в ​​этом ocx. Поэтому я пытаюсь создать свой собственный .ocx таким же образом и смоделировать проблему, с которой сталкивается поставщик. Но прежде чем я перейду туда, я ударяю эту ошибку. Любая помощь оценивается. –

ответ

3

Я не знаю, это считается ли, как решить эту проблему или нет, но я нашел обходной путь:

Во-первых, вместо C# консольного приложения, я создал C# Windows Form приложения. После создания формы я добавил все ocx в качестве компонента в панели инструментов. Вы делаете это, щелкнув правой кнопкой мыши на типах Toolbox в меню Toolbox. В новом меню нажмите «Выбрать элементы». Появится новое меню, в котором выберите вкладку COM и проверьте, что ваш COM-компонент и COM-компонент будут добавлены в меню Toolbox. Теперь перетащите компонент в меню, и вам должно быть хорошо идти.

Это, кажется, обходное решение, за которым следуют все. Неплохо, но это норма, я думаю.

+0

Я хотел бы знать другие мнения. –

+1

Вы также можете использовать утилиты командной строки tblimp/aximp, чтобы генерировать те же две обертки, что и генератор. Затем Reference System.Windows.Forms.dll и вы можете создать экземпляр вашего var ctrl = new AxSomeControl(), а затем ctrl.CreateControl(). Таким образом, вы можете иметь консольное приложение с ocx, но вам все равно нужно ссылаться на WinForms .dll. – surfen

Смежные вопросы