Я подозреваю, что у вас есть опечатка в каком-то месте, если вы проверите _Layoutlogin .cshtml
, есть ли в них пробел, поэтому, если на самом деле ваш файл _Layoutlogin.cshtml
, он не найдет его.
Для создания нового ATL проект COM, можно продолжить двигаться следующим образом:
Вы создали новый dll, но это пусто, для добавления COM-объекта, можно сделать это:
Если Вы хотите это, объект реализует интерфейс
PS: намного легче создать новый проект ATL с тем же именем в другой папке и добавить файлы, которые Вы настроили. Мастер делает несколько задач и создает несколько специализированных файлов.
Для больших проектов, которые являются трудными добавить файл файлом, я делаю то же, но вместо того, чтобы добавить мои файлы к новому проекту я начинаю копировать настройки от новых проектов до старого и добавлять любой дополнительный файл, который мастер создал и заголовки фиксации как stdafx.h для слияния новых настроек.
PPS: Если Вы хотите, чтобы тот Ваш dll поддерживал MFC, вместо того, чтобы выбрать Проект ATL необходимо выбрать MFC/MFC Dll. Когда Вы добавите Простой объект ATL, мастер попросит добавлять поддержку ATL проекту.
Необходимо записать функцию под названием DllGetClassObject и экспортировать его. Та функция ответственна за выделение "фабрики классов", которую также необходимо записать, и которая в свою очередь способна к выделению экземпляров COM-объекта. Это должно реализовать IClassFactory.
Не слишком трудно сделать. Альтернатива должна использовать ATL (см. ответ xhantt), который в теории делает это для Вас, но на практике это - реальная путаница. Так или иначе этому удается инкапсулировать сложность COM в уровне абстракции, который еще более сложен. Удача, пытающаяся перемещать объект между DLLs, например.
Но Вы могли запустить мастер ATL только для наблюдения примера того, как объявить DllGetClassObject
. Реализация IClassFactory
очень легко - всего один метод те новости объект.
Затем необходимо зарегистрировать DLL - т.е. поместить ключи в реестр. regsvr32
инструмент не может сделать этого без дальнейшей справки от Вас. Необходимо записать и экспортировать другую функцию под названием DllRegisterServer, который делает всю тяжелую работу. Все это regsvr32
делает загрузить DLL, искать DllRegisterServer
и назовите его.
Снова, ATL имеет способ реализовать это для Вас, но он делает это путем чтения своего рода сценария, полного инструкций по модификации реестра, сохраненных в .rgs файле, который встраивается в ресурсы DLL. При случайном помещении какого-либо вида синтаксической ошибки в этот файл регистрация перестала работать тихо.
Таким образом, снова можно на самом деле найти более простым записать несколько строк кода для тонкой настройки реестра сами. Вот детали.
При использовании C# вместо этого, у Вас не было бы ни одной из этих проблем. Все инкапсулируется очень чисто. Это на самом деле работает намного лучше, чем C++ как инструмент для разработки COM-объектов.
При создании решения оно автоматически регистрирует dll. И также это создает два файла _i.c и.h файл.
Для тестирования dll создают приложение приложения:
Создайте демонстрационное приложение Win32. Включайте _i.c и.h в cpp файле win32 приложения, которое имеет основную функцию
Назовите CoInitialize ();
Объявите указатель на интерфейс CComPtr pMyInterface = ПУСТОЙ УКАЗАТЕЛЬ;//, где IMyInterface объявляется в _i.c
Создайте экземпляр pMyInterface. CoCreateInstance (CLSID_MyClass);//CLSID_MyClass является GUID, представляющий
CoClass
Назовите API существующими в Интерфейсе
Назовите CoUnInitialize ();