_COM_SMARTPTR_TYPEDEF(_DKHOpenAPI, __uuidof(_DKHOpenAPI));
_COM_SMARTPTR_TYPEDEF(_DKHOpenAPIEvents, __uuidof(_DKHOpenAPIEvents));
struct __declspec(uuid("cf20fbb6-edd4-4be5-a473-fef91977deb6"))
_DKHOpenAPI : IDispatch
struct __declspec(uuid("7335f12d-8973-4bd5-b7f0-12df03d175b7"))
_DKHOpenAPIEvents : IDispatch
struct __declspec(uuid("a1574a0d-6bfa-4bd7-9020-ded88711818d"))
KHOpenAPI;
// [ default ] dispinterface _DKHOpenAPI
// [ default, source ] dispinterface _DKHOpenAPIEvents
///////////////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
{
HRESULT hr;
CLSID clsid;
CLSIDFromProgIDEx(OLESTR("KHOPENAPI.KHOpenAPICtrl.1"), &clsid);
/*
switch (hr)
{
case S_OK: cout << "S_OK";
break;
case CO_E_CLASSSTRING: cout << "CO_E_CLASSSTRING";
break;
case REGDB_E_WRITEREGDB: cout << "regdb_e_writeregdb";
break;
}
*/
_DKHOpenAPI* pApp = nullptr;
hr = CoCreateInstance(clsid, nullptr, CLSCTX_INPROC_SERVER, __uuidof(_DKHOpenAPI), reinterpret_cast<LPVOID*>(&pApp));
switch (hr)
{
case S_OK: cout << "S_OK";
break;
case REGDB_E_CLASSNOTREG: cout << "REGDB_E_CLASSNOTREG";
break;
case CLASS_E_NOAGGREGATION: cout << "CLASS_E_NOAGGREGATION";
break;
case E_NOINTERFACE: cout << "E_NOINTERFACE";
break;
case E_POINTER: cout << "E_POINTER";
break;
}
//pApp->CommConnect();
}
CoUninitialize();
return 0;
}
https://docs.microsoft.com/en-us/windows/win32/learnwin32/example--the-open-dialog-box
이거보고 순서대로 했는데
pApp->CommConnect();
여기 부분이 실행이 안됨
다른 예제 따라 해보니까 ->하는순간 실행가능한 메서드 목록 뜨던데
내껀 왜 안됨???
_DKHOpenAPI는 IDispatch클래스에서 상속받고 IDispatch는 IUnknown클래스에서 상속받음
IDispatch와 IUnknown 객체에서 호출 가능한 멤버함수는
https://docs.microsoft.com/en-us/windows/win32/api/oaidl/nn-oaidl-idispatch
https://docs.microsoft.com/en-us/windows/win32/api/unknwn/nn-unknwn-iunknown
여기
둘 링크를 참조
ActiveX 컴포넌트 사용하는 법이 따로 있음 그냥 COM 객체에 플러스 알파가 필요
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/automat/implementing-the-idispatch-interface
혹시 이거 말하는거 ? cocreateinstance - QueryInterface - GetIDsofNames - Invoke 순으로 하는거 아님????
보기만 해도 좆같노 시발