내가 사용하고있는 플랫폼은 내가 컴퓨터에서 가상 폴더를 만들 윈도우 7 SDK 샘플을 사용 7. 창에 가상 폴더에 대한 바로 가기를 만들 필요가 윈도우 7입니다 프로젝트 이름이 ExplorerDataProvider
라고, 그것은 IShellFolder 클래스의 CLSID를 정의Windows 7의 C++에서 가상 폴더에 대한 바로 가기를 만드는 방법은 무엇입니까?</p> <p><a href="https://i.stack.imgur.com/t6leq.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/t6leq.jpg" alt="enter image description here"></a></p> <p>샘플 :
// add classes supported by this module here
const CLASS_OBJECT_INIT c_rgClassObjectInit[] =
{
{ &CLSID_FolderViewImpl, CFolderViewImplFolder_CreateInstance },
{ &CLSID_FolderViewImplContextMenu,CFolderViewImplContextMenu_CreateInstance },
};
CFolderViewImplFolder_CreateInstance
에 대한 정의는 다음과 같습니다
은 IShellFolder2
amd IPersistFolder2
을 구현합니다. https://www.codeproject.com/Articles/596642/Creating-a-shortcut-programmatically-in-Cplusplus 하고 IShellFolder에 대한 클래스 식별자를 갖게되면, 당신은 인터페이스의 주소를 검색 할 수 CoCreateInstance 함수를 호출 할 수 있습니다 https://msdn.microsoft.com/en-us/library/aa969393.aspx#Shellink_Item_Identifiers
에서 : 여기 프린터에 대한 바로 가기를 만드는 데 사용되는 유사한 코드를 발견 . 그런 다음 인터페이스를 호출하여 폴더의 개체를 열거하고 검색 할 개체의 항목 식별자 주소를 검색 할 수 있습니다. 마지막으로 IShellLink :: SetIDList 멤버 함수 호출에서 주소를 사용하여 개체에 대한 바로 가기를 만들 수 있습니다.
나는
// testFolder is the CLSID for the virtual folder implementation
hr = CoCreateInstance(testFolder, NULL, CLSCTX_INPROC_SERVER, IID_IShellFolder, (LPVOID*)&pVirtualFolder);
또는
hr = CoCreateInstance(testFolder, NULL, CLSCTX_INPROC_SERVER, IID_IShellFolder2, (LPVOID*)&pVirtualFolder);
에
hr = SHGetMalloc(&pMalloc);
hr = SHGetDesktopFolder(&pDesktopFolder);
hr = SHGetSpecialFolderLocation(NULL, CSIDL_PRINTERS, &netItemIdLst);
hr = pDesktopFolder->BindToObject(netItemIdLst, NULL, IID_IShellFolder, (void **)&pPrinterFolder);
을 개정 그러나 pVirtualFolder은 여전히 NULL이며,이 "해당 인터페이스를 찾을 수 없습니다"라는 인쇄합니다.
사용할 때 CoCreateInstance
에 문제가 있습니까? 아니면이 솔루션을 사용하지 않아야합니까? 그것을위한 어떤 샘플 코드?
짧은 대답 : C++에서는 그렇게 할 수 없습니다. OS/플랫폼 특정 API를 사용하여이를 수행 할 수 있지만, 사용중인 OS, 사용하고자하는 플랫폼 및 API를 지정해야합니다. – Slava
windows 7. 그게 당신이 요구하는 것입니까? – beasone
CoCreateInstance를 직접 사용하면 안됩니다. 껍질이 그것을하게하십시오. –