Handle<Value> DispObject::set(LPOLESTR name, Local<Value> value) { // Prepare disp if (!isPrepared()) Prepare(); if (!disp) return DispError(E_NOTIMPL, __FUNCTIONW__); // Set value using dispatch DISPID dispid; CComVariant ret; VarArgumets vargs(value); HRESULT hrcode = DispInvoke(disp, name, 0, 0, &ret, DISPATCH_PROPERTYPUT, &dispid); if FAILED(hrcode) return DispError(hrcode, L"DispPropertyPut"); return DispObject::NodeCreate(disp, name, dispid); }
Handle<Value> DispObject::call(const Arguments &args) { CComVariant ret; VarArgumets vargs(args); IDispatch *pdisp = (disp) ? disp : owner_disp; DISPID dispid = (disp) ? DISPID_VALUE : owner_id; size_t argcnt = vargs.items.size(); VARIANT *argptr = (argcnt > 0) ? &vargs.items.front() : 0; HRESULT hrcode = DispInvoke(pdisp, dispid, argcnt, argptr, &ret, DISPATCH_METHOD); if FAILED(hrcode) return DispError(hrcode, L"DispMethod"); // Prepare result as object CComPtr<IDispatch> ret_disp; if (VariantDispGet(&ret, &ret_disp)) return DispObject::NodeCreate(ret_disp, /*name.GetString()*/ L"Result"); // Other result return Variant2Value(ret); }
int _tmain(int argc, _TCHAR* argv[]) { const wchar_t* link = L"C:\\_tmp\\left2.json"; const wchar_t* target = L"C:\\_tmp\\left.json"; // lnhdrlink.exeパス. wchar_t path[_MAX_PATH]; wcscpy(path, L"C:\\lnhdr\\vc10.0\\x64\\Release\\lnhdrlink.exe"); // 引数. std::vector<wchar_t> vargs(wcslen(link) + wcslen(target) + 10); wchar_t* args = &vargs[0]; swprintf(args, L"\"%ls\" \"%ls\"", link, target); // lnhdrlink.exe実行. ::SHELLEXECUTEINFOW info = {0}; info.cbSize = sizeof(info); info.lpVerb = L"open"; info.lpFile = path; info.lpParameters = args; BOOL f = ::ShellExecuteExW(&info); printf("f = %d\n", f); return 0; }