Ejemplo n.º 1
0
HRESULT OcxObject::RawInvoke(IRef<ITypeInfo>& typeinfo, IDispatch *dispatch, DISPID dispid, word flags, DISPPARAMS *params, VARIANT *result, EXCEPINFO *excep, unsigned *arg_err)
{
	LOGINVOKE("IDispatch::Invoke");
	if(dispid == 0) { // convert object to dispatch value
		if(!result) return E_INVALIDARG;
		result->vt = VT_DISPATCH;
		result->pdispVal = dispatch;
		if(dispatch) dispatch->AddRef();
		return S_OK;
	}
	if(!typeinfo) {
		LOG("dispid = " << FormatIntHex(dispid) << ": typeinfo = NULL");
		return E_FAIL;
	}
#if LOG_INVOKES >= 1
	BSTR names[1] = { NULL };
	unsigned count = 0;
	typeinfo->GetNames(dispid, names, 1, &count);
	String name;
	if(names[0])
		name = BSTRToString(names[0]);
	else
		name = FormatIntHex(dispid);
	switch(flags) {
	case DISPATCH_METHOD:         name << " - method"; break;
	case DISPATCH_PROPERTYGET:    name << " - propget"; break;
	case DISPATCH_PROPERTYPUT:    name << " - propput"; break;
	case DISPATCH_PROPERTYPUTREF: name << " - propputref"; break;
	}
	LOG("Member name: " << name);
#endif
	if(!typeinfo)
		return E_FAIL;
	TYPEATTR *attr;
	typeinfo->GetTypeAttr(&attr);
	LOGINVOKE("GetTypeInfo: typekind = " << (int)attr->typekind);
//	HRESULT res = typeinfo->Invoke(dispatch, dispid, flags, params, result, excep, arg_err);
	HRESULT res = DispInvoke(dispatch, ~typeinfo, dispid, flags, params, result, excep, arg_err);
	if(FAILED(res)) {
		RLOG("failure: dispid = " << (int)dispid << ", #args = " << (int)params->cArgs
			<< ", #named args = " << (int)params->cNamedArgs << ", return " << FormatIntHex(result));
		for(int i = 0; i < (int)params->cArgs; i++) {
			RLOG("arg[" << i << "] (vt = " << (int)params->rgvarg[i].vt << "): " << StdFormat(AsValue(params->rgvarg[i])));
		}
		RLOG("#funcs = " << attr->cFuncs);
		for(int i = 0; i < attr->cFuncs; i++) {
			FUNCDESC *func;
			typeinfo->GetFuncDesc(i, &func);
			RLOG("memid = " << func->memid << ", cParams " << func->cParams
			<< ", cParamsOpt = " << func->cParamsOpt << ", cScodes " << func->cScodes
			<< ", funckind = " << (int)func->funckind << ", invkind " << (int)func->invkind
			<< ", flags = " << FormatIntHex(func->wFuncFlags));

			typeinfo->ReleaseFuncDesc(func);
		}
	}
	typeinfo->ReleaseTypeAttr(attr);
	LOGINVOKE("//IDispatch::Invoke");
	return LOGRESULT(res);
}
Ejemplo n.º 2
0
STDMETHODIMP TDocFracLibImpl::SetInString(BSTR inString)
{
  try
  {
    DoxCore->SetInString(BSTRToString(inString));
  }
  catch(Exception &e)
  {
    return Error(e.Message.c_str(), IID_IDocFracLib);
  }
  return S_OK;
};
Ejemplo n.º 3
0
STDMETHODIMP TDocFracLibImpl::SetOutFormat(BSTR format)
{
  try
  {
    DoxCore->SetOutFormat(BSTRToString(format));
  }
  catch(Exception &e)
  {
    return Error(e.Message.c_str(), IID_IDocFracLib);
  }
  return S_OK;
};
Ejemplo n.º 4
0
HRESULT Directory::CreateDirectory(BSTR name, IDirectory** outDir)
{
	std::string sName = BSTRToString(name);
	FsBox::BlockHandle dirHandle = _containerIntf->CreateDir(_dir, sName);
	if (!dirHandle)
	{
		return E_FAIL;
	}
	Directory* directory = new(std::nothrow) Directory(_containerIntf, this, dirHandle);
	if (!directory)
	{
		_containerIntf->CloseDir(_dir);
		return E_OUTOFMEMORY;
	}
	*outDir = static_cast<IDirectory*>(directory);
	return S_OK;
}
Ejemplo n.º 5
0
HRESULT Directory::CreateFile(BSTR name, IFile** outFile)
{
	std::string sName = BSTRToString(name);
	FsBox::BlockHandle fileHandle = _containerIntf->CreateFile(_dir, sName);
	if (!fileHandle)
	{
		return E_FAIL;
	}
	File* file = new(std::nothrow) File(_containerIntf, this, fileHandle);
	if (!file)
	{
		_containerIntf->CloseFile(fileHandle);
		return E_OUTOFMEMORY;
	}
	*outFile = static_cast<IFile*>(file);
	return S_OK;
}
Ejemplo n.º 6
0
HRESULT Directory::DeleteDirectory(BSTR name)
{
	return _containerIntf->DeleteDir(_dir, BSTRToString(name)) ? S_OK : E_FAIL;
}