REGDB_E_CLASSNOTREG в COM Учебник (Pluralsight)

Я пытаюсь научить себя основам COM, и с этой целью я следую вместе с курсом Кенни Керра «Основы COM» по Pluralsight. В настоящее время я застрял в разделе «Remoting» части 2, в частности, видео под названием «Demo: Определение интерфейсов Remotable». Мое текущее полное решение перечислено здесь: https://github.com/jakotheshadows/COMClient

Я дошел до бега

midl hen.idl

а затем компилировать вывод из этого с

cl /W4 /DWIN32 /DREGISTER_PROXY_DLL *.c /link /DLL rpcrt4.lib /OUT:Proxy.dll /DEF:Exports.def

тогда я делаю

regsvr32 Proxy.dll

и он говорит, что успешно зарегистрирован.

Однако, когда я добираюсь до вызова CoGetClassObject во время работы клиента:

#include "Precompiled.h"#include "..\COMServer\Server.h"#include "..\Proxy\Hen.h"
using namespace Microsoft::WRL;

int main()
{
ComRuntime runtime(Apartment::SingleThreaded);

ComPtr<IPSFactoryBuffer> proxyFactory;

HR(CoGetClassObject(__uuidof(IAsyncHenEventHandler),
CLSCTX_INPROC_SERVER,
nullptr,
__uuidof(proxyFactory),
reinterpret_cast<void**>(proxyFactory.GetAddressOf())));

ComPtr<IHen> hen;

HR(CoCreateInstance(__uuidof(Hen), nullptr, CLSCTX_INPROC_SERVER, __uuidof(hen), reinterpret_cast<void**>(hen.GetAddressOf())));

hen->Cluck();
}

Я получаю сообщение об ошибке и вижу, что CoGetClassObject возвращает HRESULT REGDB_E_CLASSNOTREG, и пример Кенни Керра, похоже, «просто работает».

ОбновитьБыло высказано предположение, что rclsid и riid аргументы обратны в вызове, показанном выше. Я пытался:

HR(CoGetClassObject(_uuidof(proxyFactory),
CLSCTX_INPROC_SERVER,
nullptr,
__uuidof(IAsyncHenEventHandler),
reinterpret_cast<void**>(proxyFactory.GetAddressOf())));

И я все еще сталкиваюсь с тем же HRESULT от CoGetClassObject.

Я не уверен, где я ошибся здесь. Я замечаю, что когда я проверяю Proxy.dll с помощью обходчика зависимостей, я вижу нечто иное, чем г-н Керр, когда делает это:

введите описание изображения здесь

В частности, в моем Proxy.dll есть этот «ADVAPI32.DLL», которого нет, когда Кенни Керр проверяет Proxy.dll с зависимости от.exe. Кроме того, я вижу несколько ошибок, которые он, кажется, не получает:

  1. Предупреждение. По крайней мере один модуль зависимости задержки и загрузки не найден.
  2. Предупреждение: по крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в модуле, зависящем от задержки и загрузки.

Другое различие между моей средой и Кенни Керром состоит в том, что я использую Visual Studio 2015, где он использует Visual Studio 2012. Я работаю в Windows 7 Professional x64.

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы [email protected]