第一次使用C ++与COM一起工作,以前一直使用C#和Delphi。
这是代码
HRESULT Result;
Result = CoInitialize(nullptr);
if (!SUCCEEDED(Result))
return Result;
IShellDispatch* API;
Result = CoCreateInstance(CLSID_Shell, nullptr, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void **)&API);
if ((!SUCCEEDED(Result)) || (nullptr == API))
goto Cleanup;
VARIANT Source1, Source2, Destination, Options;
VariantInit(&Destination);
Destination.vt = VT_BSTR;
Destination.bstrVal = SysAllocString(OutFile.c_str());
Folder* PDestination;
Result = API->NameSpace(Destination, &PDestination);
if (!SUCCEEDED(Result))
goto Cleanup;
VariantInit(&Source1);
VariantInit(&Source2);
Source1.vt = VT_BSTR;
Source2.vt = VT_BSTR;
Source1.bstrVal = SysAllocString(InFile1.c_str());
Source2.bstrVal = SysAllocString(InFile2.c_str());
VariantInit(&Options);
Options.vt = VT_I4;
Options.lVal = FOF_NO_UI;
PDestination->CopyHere(Source1, Options);
Sleep(1000);
PDestination->CopyHere(Source2, Options);
Sleep(1000);
PDestination->Release();
API->Release();
Cleanup:
CoUninitialize();
return Result;
OutFile,InFile1和InFile2的类型为wstring,因为程序(主要是C ++)。我设法创建了一个空的ZIP文件,这不是问题。问题是我得到一个例外,声称PDestination为nullptr。
如果有帮助,变体本身似乎可以正常工作。在调试器中检查它们会产生我提供的路径。我注意到,尽管NameSpace调用如何返回S_FALSE。有谁知道我能做些什么?
使用库不能完全正常工作,它是公司代码,并且在链接外部代码时存在一些真正严酷的规则,因此使用Windows API是最简单的方法。