使用参数调用COM方法的普通C ++代码

时间:2012-08-03 18:23:42

标签: c++ com

我能够像这样创建SharePoint.OpenDocuments.1 ActiveX控件的实例:

CLSID clsid;
HRESULT hResult; 
IDispatch *pWApp;
LPCOLESTR strPid = L"SharePoint.OpenDocuments.1";

CoInitialize(NULL);  
hResult = CLSIDFromProgID(strPid, &clsid);
if(SUCCEEDED(hResult))
    hResult = CoCreateInstance(clsid, NULL, CLSCTX_ALL , IID_IDispatch, (void **)&pWApp);

我在使用文档名称调用“EditDocument”方法时遇到了一些麻烦。我无法弄清楚如何调用或使用变体。

任何代码提示?

2 个答案:

答案 0 :(得分:2)

至少如果我正确阅读文档,您需要一个BSTR,您可以使用SysAllocString创建。

答案 1 :(得分:0)

如果您在C ++项目中使用ATL,则可以使用类CComBSTR轻松创建BSTR字符串,并将其作为参数传递给OpenDocuments.EditDocuments

CComBSTR tempBstr = _T("c:\\myfolder\\myfile.txt");
someObj->SomeMethodThatUsesBSTR(tempBstr);

如果您不使用ATL,则可以同样方式使用comutil.h中的课程bstr_t

bstr_t tempBstr = _T("c:\\myfolder\\myfile.txt");
someObj->SomeMethodThatUsesBSTR(tempBstr.GetBSTR());

两个类(CComBSTR和bstr_t)都只是内部调用SysAllocStringSysFreeString的包装器。