Если вы получаете REGDB_E_CLASSNOTREG, вы, вероятно, смешиваете 32- и 64-битные вещи: возможно, вы пытаетесь вызвать CoCreateInstance из 64-битной программы, если у вас нет 64-битной версии VS2010 ( у них есть один?)
Я также нашел это , которое было экземпляром кого-то, передающего указатель на void, а не указатель на указатель на void. Вы не показали, что такое тип _PDM, поэтому я не могу сказать, правильно ли вы его объявили (хотя в этом случае вы должны были получить предупреждение компилятора.)
Отредактировано, чтобы добавить:
#pragma comment(lib, "ole32.lib")
#define UNICODE
#define STRICT
#include <windows.h>
#include <activdbg.h>
#include <iostream>
using std::wcout;
using std::hex;
using std::endl;
int main(void)
{
HRESULT hr;
IProcessDebugManager *ppdm = NULL;
IDebugApplication *pda = NULL;
IClassFactory *pcf = NULL;
DWORD cook = 0;
CoInitialize(NULL);
hr = CoGetClassObject(CLSID_ProcessDebugManager, CLSCTX_INPROC_SERVER,
NULL, IID_IClassFactory, (LPVOID *)&pcf);
wcout << L"CoGetClassObject: " << std::hex << hr << endl;
if (FAILED(hr)) goto done;
hr = pcf->CreateInstance(0, IID_IProcessDebugManager32, (LPVOID *)&ppdm);
wcout << L"CreateInstance: " << std::hex << hr << endl;
if (FAILED(hr)) goto done;
pcf->Release();
hr = ppdm->CreateApplication(&pda);
wcout << L"CreateApplication: " << std::hex << hr << endl;
if (FAILED(hr)) goto done;
ppdm->AddApplication(pda, &cook);
pda->SetName(L"Moosh!");
ppdm->RemoveApplication(cook);
pda->Release();
ppdm->Release();
done:
CoUninitialize();
return 0;
}
Никакой реальной проверки ошибок, ничего не делает, кроме тестирования одной базовой функции и т. Д., Но это не выдает никаких ошибок. Вы не предоставили никаких подробностей относительно того, что означает «не работает», и, как я думаю, я упомянул, я не знаю, как использовать этот материал, но я могу, по крайней мере, получить IProcesDebugManager и приложение IDebugApplication с этим кодом .