Я после этого учебника сайты:HRESULT "Класс не зарегистрирован" Внедрение простой COM сервера DLL
http://progtutorials.tripod.com/COM.htm
Предварительные данные: Visual Studio 2010, Windows 7 64 бит.
и я кодирую примеры в разделе 3. (Реализация серверной DLL). Я набрал код точно так, как показано, и я получаю исключение класса без регистрации при выполнении этого кода в строке 12 кода, описанного в разделе 4.1 (где в учебнике показано, как получить доступ к DLL, и у меня есть а затем 3.1 к письму):
hresult hr = CoGetClassObject(CLSID_Car, CLSCTX_SERVER, NULL, IID_IClassFactory, (void **) &pClassFactory);
Я попытался запустить:
regsvr32 xyz.dll
с xyz.dll будет путем к моей библиотеке DLL, чтобы зарегистрировать DLL. Это привело к ошибке, пытаясь найти DLLRegisterServer:
я уже запустить
REGEDIT
HKEY_CLASSES_ROOT\CarDLL.Car\CLSID = {d969084c-b758-43ea-a218-a48763167abd}
HKEY_CLASSES_ROOT\CLSID\{d969084c-b758-43ea-a218-a48763167abd} = CarDLL.Car
HKEY_CLASSES_ROOT\CLSID\{d969084c-b758-43ea-a218-a48763167abd}\InProcServer32 = C:\Users\wiocl2\Documents\Visual Studio 2010\Projects\CarDLL\debug\CarDLL.dll
, что я предполагал поставить все Guids мне нужно в реестре (The Guids были получены мной) ,
Я предполагаю, что функция должна быть добавлена в класс, который позволяет ее регистрировать, но я не знаю, как это сделать и как это сделать. Я немного потерялся, поскольку я не работал с COM очень долго. Если кто-то может дать мне толчок в правильном направлении, это будет полезно.
Edit: Ах да, я переехал #include // содержит определение DEFINE_GUID
в iid.h файл из iid.cpp, в противном случае я получаю неразрешенные внешние ошибки на сборке.
Какой инструмент вы используете для создания COM-библиотеки DLL? – OldProgrammer
Я только что закодировал файлы, продиктованные в учебнике, в проекте Win32 dll в Visual Studio и построил его. Он сгенерировал DLL-файл, и именно так я указываю свой проект. – valkn0t
regsvr32 вызывает DllRegisterServer в DLL, и вы не предоставляете этот интерфейс. См. Http://msdn.microsoft.com/en-us/library/windows/desktop/ms682162(v=vs.85).aspx Кроме того, создавайте ли вы все это вручную, как учебное упражнение? Если нет, вы можете устранить эту проблему, используя существующие фреймворки, такие как ATL. – OldProgrammer