Как создать HelloWorld COM Interop в Visual Studio 2012

Прежде всего, я новичок в COM, и в настоящее время довольно смущен. Я прочитал много документации по COM на MSDN и в Интернете, но многие из них кажутся устаревшими и чрезмерно сложными.

Вот что я считаю необходимым, чтобы заставить его работать. Это еще не так, поэтому я уверен, что что-то упустил, но, давая свой рецепт, я надеюсь, что кто-то может определить проблему:

  1. Создайте проект консольного приложения C #. Я называю это CSharpApp
  2. Создайте проект C ++ ATL. Я называю это ComLib.Interop.
    • Добавить класс (шаблон: ATL Simple Object), который я называю «InteropDemo»
    • В представлении классов щелкните правой кнопкой мыши IInteropDemo и добавьте метод HelloWorld.
  3. (Удалено, сохранено для правильной нумерации в ответах.)
  4. Компиляция.
  5. Добавьте ссылку на ComLib.Interop.dll в CSharpApp.
    • Вызовите regsrv32.exe на скомпилированном COM dll, затем выберите DLL на вкладке COM в «Добавить ссылки …»
  6. В Program.cs, Main, создайте класс InteropDemo и вызовите HelloWorld.
  7. Прибыль.

Благодаря ответам я обновил вопрос, чтобы отразить объединенное решение.

5

Решение

Попробуйте выполнить следующие действия:

  1. Убедитесь, что оба проекта, неуправляемый C ++ и управляемый C #, имеют одинаковую разрядность — x86 или x64. Допустим, это x86, для ясности.
  2. открыто Администратор Командная строка и зарегистрируйте вашу COM DLL: C:\Windows\SysWOW64\regsvr32.exe c:\full-path\ComLib.Interop.dll
  3. Запустите Visual Studio как Администратор. Выполните шаги 1,2,4,5,6. Не делай 3.

Посмотрите, дойдете ли вы до 7. Думаю, это должно сработать.

Обратите внимание, что вам нужна только регистрация на компьютере разработчика. Изолированный COM должен работать везде.

3

Другие решения

Вы, вероятно, ошиблись на шаге 2, учитывая, что не получили ошибку сборки. Мастер дает вам более одного выбора для Добрый класса вы добавляете. По умолчанию выбрано «C ++ class», вместо этого вам нужно выбрать ATL + «ATL Simple Object».

Окно Class View теперь показывает два добавление типов, интерфейс IInteropDemo и класс CInteropDemo, который реализует интерфейс. Вы затем щелкните правой кнопкой мыши интерфейс введите (не класс) и используйте «Добавить метод». Теперь вы также можете взглянуть на файл IDL в проекте, он должен выглядеть примерно так:

import "oaidl.idl";
import "ocidl.idl";

[
object,
uuid(CBA0D899-2F4C-4F1D-A935-C80CB981C153),
dual,
nonextensible,
pointer_default(unique)
]
interface IInteropDemo : IDispatch{
[id(1)] HRESULT Method();
};
[
uuid(ED14ACED-4FF9-4144-B302-CC48C481F28B),
version(1.0),
]
library ATLProject4Lib
{
importlib("stdole2.tlb");
[
uuid(8543642F-9927-451C-9784-6A7774418299)
]
coclass InteropDemo
{
[default] interface IInteropDemo;
};
};

Этого достаточно, чтобы его построить. Что должно произойти сбой в любой современной версии Windows, UAC препятствует регистрации COM-сервера. Для чего требуется шаг № 0: Запустите Visual Studio, щелкнув правой кнопкой мыши ярлык и выбрав «Запуск от имени администратора».

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector